2017-06-16 78 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

订购扑杀确实不管面对剔除已启用。什么是正面,什么是三角形的背面取决于设定的发条顺序。如果启用了反时针绕线(默认),则屏幕上按逆时针顺序出现顶点的顶点将被视为“前”侧。

如果启用了剔除功能,则只绘制您从选定面看到的三角形。

相关问题