OpenGL ES 2.0 - 在顶点着色器中找不到属性

时间:2011-08-26 10:17:02

标签: iphone opengl-es shader vertex

我已经找了一段时间来回答这个问题 - 但我运气不好。 我所要做的就是将我的普通数据传递到我的顶点着色器中。位置正确传入,但是在尝试加载着色器时,我收到“找不到正常属性”错误。

我的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);
}

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

// 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");

同样,这个职位也有效。但是“正常”无法找到。有什么想法吗?

1 个答案:

答案 0 :(得分:10)

找不到

normal因为您的GLSL编译器很聪明。它看到你实际上并没有用normal 的东西,所以它假装它不存在以节省资源。

此外,您的正常和位置应为vec3,因为您只传递了3个值。这不是严格要求的,但是使输入和属性匹配是更好的形式。