【问题标题】:Does the order of indices matter?索引的顺序重要吗?
【发布时间】:2017-11-18 20:02:37
【问题描述】:
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]);

你知道这是为什么吗?为什么索引的顺序很重要?我怎么知道索引的正确顺序?

附言。它在将绘制类型设置为 LINE_LOOP 时有效,但不适用于三角形。

【问题讨论】:

  • 什么是 POINT_LOOP? WebGL中没有这样的东西吗?
  • 抱歉打错了。我的意思是 LINE_LOOP

标签: javascript webgl indices vertices


【解决方案1】:

如果剔除在gl.enable(gl.CULL_FACE) 上,则如果三角形的顶点在剪辑空间中逆时针方向(即,在顶点着色器之后),则会剔除三角形。您可以使用gl.cullFace(...) 选择顺时针或逆时针剔除哪些三角形

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

clockwise   counter-clockwise

【讨论】:

  • 啊,我明白了。我什至不记得我启用了剔除。非常感谢!
【解决方案2】:

如果启用面剔除,顶点的顺序确实很重要。三角形的正面和背面取决于设置的缠绕顺序。如果启用逆时针缠绕(默认设置),则在屏幕上以逆时针顺序出现的面被视为“正面”。

如果启用了剔除,则只会绘制您从选定一侧查看的三角形。

【讨论】:

    猜你喜欢
    • 2017-07-04
    • 2011-01-12
    • 2012-09-02
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    相关资源
    最近更新 更多