DirectX 9.0中的坐標變換:從模型空間到屏幕坐標


局部坐標系到世界坐標系:

 

物體的局部坐標(模型坐標)通過世界變換(IDirect3DDevice9::SetTransform(D3DTS_WORLD, matrix))變換到世界坐標。

將一個物體的中心置於世界坐標系的點(-3, 2, 6):

D3DXMATRIX matrix;
D3DXMatrixTranslation(&matrix, -3.0f, 2.0f, 6.0f);
Device->SetTransform(D3DTS_WORLD, matrix);

世界坐標系到觀察坐標系:

在世界空間中,幾何體和攝像機都是相對於世界坐標系定義的,當攝像機朝向任意時,投影變換或其他變換就略顯困難或效率不高。為了簡化運算,將攝像機的局部坐標系變換到與世界坐標系重疊(攝像機的朝向與世界坐標系的z軸一致),此時世界空間中的幾何體也做相同的變換使攝像機的視場恆定。這種變換稱為取景變換,變換后的幾何體位於以攝像機為原點的觀察坐標系

//獲得取景變換矩陣

D3DXMatrixLookAtLH(&matrix, &position, &targetPoint, &worldUp) 

//設置取景變換

Device->SetTransform(D3DTS_VIEW, &matrix);

取景變換矩陣推導過程:View Transform詳解

觀察坐標系到投影坐標系:

視錐體是一個三維體,它的位置和攝像機相關,視錐體的形狀決定了模型如何從投影到屏幕上。最常見的投影類型-透視投影,使得離攝像機近的物體投影后較大,而離攝像機較遠的物體投影后較小。透視投影使用棱錐作為視錐體,攝像機位於棱錐的椎頂。該棱錐被前后兩個平面截斷,形成一個棱台,叫做View Frustum,只有位於Frustum內部的模型才是可見的。

在DirectX中,投影變換將觀察坐標系中的頂點變換到投影坐標系(如下圖右邊的立方體),經過投影變換變換后的坐標仍然是三維的,z坐標被縮放到[0, 1]x坐標范圍是[-1, 1],y坐標范圍是[-1, 1]。

設置投影變換矩陣:

D3DXMATRIX proj;
D3DXMatrixPerspectiveFovLH(&proj,  fov, aspect, zn, zf);
Device->SetTransform(D3DTS_PROJECTION, &proj);

 

投影變換矩陣推導過程:透視投影詳解

投影平面到視口坐標系

DirectX視口變換矩陣詳解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM