DirectX 9.0中的坐标变换:从模型空间到屏幕坐标 透视投影详解 DirectX视口变换矩阵详解

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

物体的局部坐标(模型坐标)通过世界变换(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视口变换矩阵详解

猜你喜欢

转载自www.cnblogs.com/Ivan326/p/9030842.html