局部坐標系到世界坐標系:
物體的局部坐標(模型坐標)通過世界變換(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);