我已经找了一段时间来回答这个问题 - 但我运气不好。 我所要做的就是将我的普通数据传递到我的顶点着色器中。位置正确传入,但是在尝试加载着色器时,我收到“找不到正常属性”错误。
我的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");
同样,这个职位也有效。但是“正常”无法找到。有什么想法吗?
答案 0 :(得分:10)
normal
因为您的GLSL编译器很聪明。它看到你实际上并没有用normal
做的东西,所以它假装它不存在以节省资源。
此外,您的正常和位置应为vec3
,因为您只传递了3个值。这不是严格要求的,但是使输入和属性匹配是更好的形式。