D3D 的D3DXMatrixLookAtLH矩陣的計算過程

1.      線性空間,向量,基三者之間的關係:

線性空間是由向量的集合組成的。在維度爲n的向量空間中,基就是由n個互相垂直的向量組成,並且在這個線性空間中的任何一個向量都能表示爲基中n個向量的線性組合。

 

2.      維數爲3的向量空間的定義:

維度爲3的線性空間具有幾何意義,它的定義是:所有在三維空間中以原點爲起始點的向量的集合。這裏需要注意的是這裏的向量的定義都是以原點爲起點。

 

3.      叉積

因爲D3D裏面是左手座標系,所以這裏澄清叉積具體規則:

Ex:  a× b

“正確”的向量由向量空間的方向確定,即按照給定直角座標系 (i, j, k) 的左右手定則。若 (i, j, k) 滿足右手定則,則 (a, b, a × b) 也滿足右手定則;或者兩者同時滿足左手定則

 “右手定則”的結果向量的方向的方法是這樣的:若座標系是滿足右手定則的,當右手的四指從a以不超過180度的轉角轉向b時,豎起的大拇指指向是c的方向。

“左手定則”的結果向量的方向的方法是這樣的:若座標系是滿足左手定則的,當左手的四指從a以不超過180度的轉角轉向b時,豎起的大拇指指向是c的方向。

 

 

4.下面給出D3D視圖矩陣的計算方式:

D3DXMATRIX *D3DXMatrixLookAtLH(
            D3DXMATRIX*pOut,
            CONSTD3DXVECTOR3* pEye,
            CONSTD3DXVECTOR3* pAt,
            CONSTD3DXVECTOR3* pUp
        );

eye:相機所在的位置
at:目標點的位置。at – eye 的向量剛好構成眼睛的方向。
up:向上的方向向量,書中介紹時爲[0,1,0],而很多地方用[0,-1,0]
觀察座標系的z軸爲:zaxis = normal(at -eye)
觀察座標系的x軸爲:xaxis =normal(cross(up,zaxis))
觀察座標系的y軸爲:yaxis =cross(zaxis,xaxis)
其中:normal爲使單位向量化,cross爲求兩向量的法向量(單位向量)
dot爲:軸 * eye.x + 軸 * eye.y + 軸 * eye.z
創建的矩陣爲
-----------------------------------------------------------------------------------------------------
xaxis.x yaxis.x zaxis.x  0
xaxis.yyaxis.y zaxis.y  0
xaxis.z yaxis.z zaxis.z 0
-dot(xaxis,eye) -dot(yaxis,eye) -dot(zaxis,eye) 1

 

注意:用過渡矩陣求出來的點的座標是以世界座標系的原點爲起點的座標,所以還需要一個平移操作才能是最後的結果。

 

 

4.      D3D中的左手座標系就是以Z軸方向爲眼睛的方向,右手座標系就是以Z軸的反方向爲眼睛的方向。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章