設OpenGL的鏡頭坐標系的三個軸為(R,U,N),這里的R,U,N的數(shù)值表達在世界坐標系上,表達為*行*向量.則OpenGL用gluLookAt建立的ViewMatrix為: 這是因為OpenGL使用該死的列存儲方式,而上述規(guī)則使用行存儲方式表達.行存儲或列存儲完全是計算機中數(shù)組的內(nèi)存的行優(yōu)先或列優(yōu)先的排布問題(怎么會有人習慣列優(yōu)先存儲這種變態(tài)的思維),與空間數(shù)學概念(如列向量,行向量)無關. 在大多公告板實現(xiàn)的代碼,都有glGetFloatv(GL_MODELVIEW_MATRIX, &mat); 然后從各列中解析出R,U,N的步驟,接著用R,U,N作公告板計算. 在DirectX中D3DXMatrixLookAtLH建立出的ViewMatrix為(R, U, N),這里的R,U,N是列向量,即ViewMatrix的第一列是R,第二列是U,第三列是N. OpenGL中能直接取到的是ModelViewMatrix,此矩陣將模型坐標從模型坐標系轉(zhuǎn)換到鏡頭坐標系,ModelViewMatrix的逆矩陣可以將鏡頭坐標系下的坐標轉(zhuǎn)換到模型坐標系,一個典型的應用是:已知在鏡頭坐標系下,鏡頭所在(0, 0, 0)點,則使用上述逆矩陣推算出鏡頭在模型坐標下的位置.注意要想推算鏡頭在世界坐標系下的位置,需要使用ViewMatrix的逆矩陣. |
|
來自: 昵稱12278894 > 《opengL》