所以直到最近我一直在改造這樣我的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