2

次のコードを使用して、頂点属性として 4x4 マトリックスを使用しようとしています。

Mat4 matrices[numVerts];

int mtxBoneID = glGetAttribLocation(hProgram, "aMtxBone");

glEnableVertexAttribArray(mtxBoneID + 0);
glEnableVertexAttribArray(mtxBoneID + 1);
glEnableVertexAttribArray(mtxBoneID + 2);
glEnableVertexAttribArray(mtxBoneID + 3);
glVertexAttribPointer(mtxBoneID + 0, 4, GL_FLOAT, GL_FALSE, sizeof(Mat4), ((Vec4*)matrices) + 0);
glVertexAttribPointer(mtxBoneID + 1, 4, GL_FLOAT, GL_FALSE, sizeof(Mat4), ((Vec4*)matrices) + 1);
glVertexAttribPointer(mtxBoneID + 2, 4, GL_FLOAT, GL_FALSE, sizeof(Mat4), ((Vec4*)matrices) + 2);
glVertexAttribPointer(mtxBoneID + 3, 4, GL_FLOAT, GL_FALSE, sizeof(Mat4), ((Vec4*)matrices) + 3);

// shader:
// ...
attribute mat4 aMtxBone;
// ...

しかし、画面に表示されるのはゴミだけです。

4

4 に答える 4

0

シェーダー使用レイアウトでこのようなことを試すことができます

layout(location=x) in mat4 <name>;

x は と等しくなりません。glGetAttribLocation自分で維持する必要があります。これは、 を呼び出す回数と同じですglVertexAttribPointer。例

layout(location=0) in vec4 in_Position;
layout(location=1) in vec4 in_Color;
layout(location=2) in vec4 in_Normal;

glVertexAttribPointer(0, xxxxxxxx);
glVertexAttribPointer(1, xxxxxx);
glVertexAttribPointer(2, xxxxxx);
于 2012-10-09T17:42:03.690 に答える
-1

最初に、マトリックスの VBO ( glGenBuffers) を作成し、それをバインド ( glBindBuffer) し、次に使用する必要があります。

glVertexAttribPointer(mtxBoneID + 0, 4, GL_FLOAT, GL_FALSE, 0, 0);
glVertexAttribPointer(mtxBoneID + 1, 4, GL_FLOAT, GL_FALSE, 0, 4);
glVertexAttribPointer(mtxBoneID + 2, 4, GL_FLOAT, GL_FALSE, 0, 8);
glVertexAttribPointer(mtxBoneID + 3, 4, GL_FLOAT, GL_FALSE, 0, 12);

glVertexAttribPointerあなたの電話の代わりに。

于 2012-10-09T07:54:30.163 に答える
-1

オフセットがずれているようです。そのはず

((Vec4*)matrices) + sizeOf(Vec4)*i

それ以外の

((Vec4*)matrices) + i
于 2012-11-21T16:24:24.837 に答える