私はこれに対する答えをしばらく探しましたが、あまり運がありません。私がやろうとしているのは、通常のデータを頂点シェーダーに渡すことだけです。位置は正しく渡されますが、シェーダーをロードしようとすると「通常の属性が見つかりません」というエラーが表示されます。
私の ATTRIB 値は列挙型です。
Iphone 開発用に OpenGL ES 2.0 でキューブを作成しました。
私の 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");
繰り返しますが、位置は機能します。しかし、「普通」は見つかりません。何か案は?