1

我已经为此寻找了一段时间的答案-但我运气不佳。我要做的就是将我的正常数据传递到我的顶点着色器中。位置正确传递,但是在尝试加载着色器时收到“未找到正常属性”错误。

我的 ATTRIB 值是枚举。

我在 OpenGL ES 2.0 中为 Iphone 开发创建了一个立方体。

我的 Shader.vsh 看起来像这样:

attribute vec4 normal;
attribute vec4 position;

varying vec4 colorVarying;

uniform mat4 mvp_matrix;

void main()
{
    //Trasform the vertex
    gl_Position = mvp_matrix * position;

    colorVarying = vec4(1.0, 1.0, 0.0, 0.0);
}

我在并条框中更新属性值的部分如下所示:

// Update attribute values.
glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, 0, 0, cubeVerticesStrip);
glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_NORMAL, 3, GL_FLOAT, 0, 0, cubeNormalsStrip);
glEnableVertexAttribArray(ATTRIB_NORMAL);

我在 LoadShader 函数中绑定这些的部分是这样的:

glBindAttribLocation(program, ATTRIB_VERTEX, "position");
glBindAttribLocation(program, ATTRIB_NORMAL, "normal");

再次,该职位有效。但是找不到“正常”。有任何想法吗?

4

1 回答 1

13

normal找不到,因为您的 GLSL 编译器很聪明。它看到你实际上并没有对任何事情normal,所以它假装它不存在以节省资源。

此外,您的 normal 和 position 应该是vec3's,因为您只传递了 3 个值。这不是严格要求的,但最好是让您的输入和属性匹配。

于 2011-08-26T10:32:56.743 回答