|
設(shè)OpenGL的鏡頭坐標(biāo)系的三個軸為(R,U,N),這里的R,U,N的數(shù)值表達(dá)在世界坐標(biāo)系上,表達(dá)為*行*向量.則OpenGL用gluLookAt建立的ViewMatrix為: 這是因為OpenGL使用該死的列存儲方式,而上述規(guī)則使用行存儲方式表達(dá).行存儲或列存儲完全是計算機(jī)中數(shù)組的內(nèi)存的行優(yōu)先或列優(yōu)先的排布問題(怎么會有人習(xí)慣列優(yōu)先存儲這種變態(tài)的思維),與空間數(shù)學(xué)概念(如列向量,行向量)無關(guān). 在大多公告板實現(xiàn)的代碼,都有g(shù)lGetFloatv(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,此矩陣將模型坐標(biāo)從模型坐標(biāo)系轉(zhuǎn)換到鏡頭坐標(biāo)系,ModelViewMatrix的逆矩陣可以將鏡頭坐標(biāo)系下的坐標(biāo)轉(zhuǎn)換到模型坐標(biāo)系,一個典型的應(yīng)用是:已知在鏡頭坐標(biāo)系下,鏡頭所在(0, 0, 0)點,則使用上述逆矩陣推算出鏡頭在模型坐標(biāo)下的位置.注意要想推算鏡頭在世界坐標(biāo)系下的位置,需要使用ViewMatrix的逆矩陣. |
|
|