我有一个 4x4 矩阵类,将值保存为 2d 浮点数组:float mat[4][4]; 我重载了 [] 运算符
inline float *Matrix4::operator[](int row)
{
return mat[row];
}
我的着色器中有一个统一的 mat4(统一的 mat4 Bones[64];),我将把我的数据上传到上面。我将骨骼保存为 Matrix4 指针 (Matrix4 *finalBones),它是一个矩阵数组,包含 numJoints 元素。这就是我用来上传数据的:
glUniformMatrix4fv(shader.getLocation("Bones"),numJoints,false,finalBones[0][0]);
我完全不确定会发生什么,所以我需要询问这是否可行,或者我需要将所有内容提取到 16*numJoints 大小的浮点数组中,这对于每个刻度来说似乎都很昂贵。
编辑这是我所做的,对于每个绘制操作来说似乎真的很昂贵
void MD5Loader::uploadToGPU()
{
float* finalmat=new float[16*numJoints];
for (int i=0; i < numJoints; i++)
for (int j=0; j < 4; j++)
for(int k=0; k < 4; k++)
finalmat[16*i + j*4 + k] = finalBones[i][j][k];
glUniformMatrix4fv(shader.getLocation("Bones"),numJoints,false,finalmat);
delete[] finalmat;
}