【发布时间】:2012-10-09 03:31:54
【问题描述】:
我正在尝试使用 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;
// ...
但我在屏幕上看到的都是垃圾。
【问题讨论】:
-
如果你想进行网格蒙皮,最好将矩阵作为制服传递,并使用一个或多个整数向量属性来尊重它们。
-
您找到解决方案了吗?我遇到了完全相同的问题。
-
@sak 就像 Luca 所说,您可以将整数索引作为顶点属性传递到数组中,但不要将矩阵作为制服发送(着色器有最大数量的制服,这可能还不够)您可以将所有矩阵存储在浮点纹理中,然后使用最近邻采样对其进行采样。
-
Mat4 类型是什么样子的?
标签: c++ opengl glsl vertex-shader