所以直到最近我一直在改造这样我的OpenGL的对象(Rotation_Matrix是GLfloat [16],我把它从存储对象的方向四元,效果很好):翻译摄像头矩阵在OpenGL
glTranslatef(Position.x, Position.y, Position.z);
glMultMatrixf(Rotation_Matrix);
但最近我发现我可以做glMultMatrixf()如果我这样做第一:
Rotation_Matrix[12] = Position.x;
Rotation_Matrix[13] = Position.y;
Rotation_Matrix[14] = Position.z;
这意味着一切都很好,我相信这是过渡到OpenGL的3.0+以后重要?因为我们必须拥有自己的矩阵。
所以我切换到新系统,而无需glTranslatef()函数,和一切运作良好,除了我的相机。对于相机我得到Camera_Matrix从定向四元的逆,它曾经这样精细的工作:
glMultMatrixf(Camera_Matrix);
glTranslatef(-CameraPos.x, -CameraPos.y, -CameraPos.z);
但如果我设置的值12,第13和14 -CameraPos,相机不向右移动,有时候往前走会使它横向移动,反之亦然,而我移动得越多,移动就越错误。
如何正确添加翻译到相机的转换矩阵?
SOLUTION:
而不是使用正常的位置,你必须计算点产品本身(记住这些是OpenGL的矩阵!)的:
GLfloat xDot = Position.x * m_RotationMatrix[0] +
Position.y * m_RotationMatrix[4] +
Position.z * m_RotationMatrix[8];
GLfloat yDot = Position.x * m_RotationMatrix[1] +
Position.y * m_RotationMatrix[5] +
Position.z * m_RotationMatrix[9];
GLfloat zDot = Position.x * m_RotationMatrix[2] +
Position.y * m_RotationMatrix[6] +
Position.z * m_RotationMatrix[10];
m_RotationMatrix[12] = -xDot;
m_RotationMatrix[13] = -yDot;
m_RotationMatrix[14] = -zDot;
你为什么不使用'glm'? :) – 2013-03-05 19:41:44