【问题标题】:glDrawElements: attempt to access out of range vertices in attribute 1glDrawElements:尝试访问属性 1 中超出范围的顶点
【发布时间】:2018-04-16 05:40:57
【问题描述】:

注意:一般问题之前已经问过,但这种错误似乎真的取决于具体情况。如果这确实是重复的,请道歉

尽管检查了很多东西,但属性 a_Morph_0 出现“超出范围”错误:

  1. 属性存在于着色器中
  2. 我正在使用 VAO,并尝试释放它(设置为 null)
  3. 管道可以很好地处理其他数据
  4. 我之前遇到过这个错误,我只是通过从 fragment 着色器上切掉一些东西来解决这个问题,但这一次没有帮助
  5. 切换 a_Positiona_Morph_0 的顺序会相应地更改错误,即它仍然引用 a_Morph_0。

顶点着色器代码:

attribute vec4 a_Position;
attribute vec4 a_Morph_0;
attribute vec4 a_Morph_1;
uniform float u_MorphWeights[2];

uniform mat4 u_MVPMatrix;
uniform mat4 u_ModelMatrix;    

void main() {
    vec4 m_Position = a_Position;

    m_Position += (u_MorphWeights[0] * a_Morph_0);
    m_Position += (u_MorphWeights[1] * a_Morph_1);

    gl_Position = u_MVPMatrix * m_Position;
}

一些相关数据:

  • elements 的数据:Uint16Array(3) [0, 1, 2]
  • 属性a_Position的数据:Float32Array(9) [0, 0, 0, 1, 0, 0, 0.5, 0.5, 0]
  • 属性 a_Morph_0 的数据:Float32Array(9) [0, 0, 0, 0, 0, 0, -1, 1, 0]
  • 属性a_Morph_1的数据:Float32Array(9) [0, 0, 0, 0, 0, 0, 1, 1, 0]

draw call 的计数为 3。具体来说:

gl.drawElements(4, 3, 5123, 0);

Spector 截图:

还有什么我应该检查的吗?

【问题讨论】:

  • "元素数据:Uint16Array(3) [0, 1, 2]"

标签: webgl


【解决方案1】:

我发现了我的错误 - 如果我们查看 Spector 输出,变形属性有一个非零的 offsetPointer,即 36 和 72

这在我当前的实现中是不正确的,因为数据在上传到 GPU 缓冲区之前被分割到正确的段。因此偏移量应始终为 0。

【讨论】:

    猜你喜欢
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    相关资源
    最近更新 更多