2017-06-16 108 views
0
this._vertices = new Float32Array([ 
      -0.5, 0, 0, // left 
      0, 0.5, 0, // top 
      0.5, 0, 0 // right 
     ]); 

this._indicies = new Uint16Array([0, 1, 2]); 

正如你所看到的,我有一個三角形3點。這個問題是,我的三角不會最終得到渲染,除非我改變指數爲指數的順序是否重要?

this._indicies = new Uint16Array([0, 2, 1]); 

你知道這是爲什麼嗎?爲什麼指數的順序很重要?我怎麼知道把指數放進去的正確順序?

Ps。它在將繪圖類型設置爲LINE_LOOP時起作用,但不適用於三角形。

+0

什麼是POINT_LOOP? WebGL中沒有這樣的東西? – gman

+0

對不起,這是一個錯字。我的意思是LINE_LOOP – CodingMadeEasy

回答

1

如果剔除是在gl.enable(gl.CULL_FACE),那麼如果三角形的頂點在剪輯空間中逆時針(即在頂點着色器之後)則被剔除。您可以選擇哪些三角形,順時針或逆時針得到與頂點gl.cullFace(...)

 0    0 
    /\   /\ 
/ \  / \ 
    2-----1  1-----2 

clockwise counter-clockwise 
+0

啊,我覺得這很有道理。我甚至沒有記得我啓用了撲殺。非常感謝! – CodingMadeEasy

1

訂購撲殺確實不管面對剔除已啓用。什麼是正面,什麼是三角形的背面取決於設定的發條順序。如果啓用了反時針繞線(默認),則屏幕上按逆時針順序出現頂點的頂點將被視爲「前」側。

如果啓用了剔除功能,則只繪製您從選定面看到的三角形。

相關問題