视口变换矩阵决定了视口的位置和旋转。视口矩阵就是场景的摄像机。
下面的代码段创建了视口变换矩阵,并加以设置。
D3DXMATRIX matView;
D3DXMatrixLookAtLH( &matView, &D3DXVECTOR3( 0.0f, 3.0f,-5.0f ),
&D3DXVECTOR3( 0.0f, 0.0f, 0.0f ),
&D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
第一步通过调用D3DXMatrixLookAtLH来定义视口矩阵。第一个参数是一个指向D3DXMATRIX结构的指针,它也是该操作的返回值。第二,第三和第四个参数定义了观察点,目标点和当前世界的“上”方向。此处,观察点被设为沿z轴负方向5个单位并且沿上方向3个单位,目标点设置为原点,“上”方向定义为y轴方向。
接下来通过调用IDirect3DDevice9::SetTransform来设置视口变换矩阵。第一个参数告知Direct3D需要设置哪一种变换。本例中使用D3DTS_VIEW标识指定设置视口变换矩阵。第二个参数即为当前需要设置的变换矩阵指针。
After defining the world transformation for the scene, you can prepare the projection transformation matrix. Again, note that the order in which transformations are defined is not critical. However, Direct3D applies the matrices to the scene in the following order: (1) World ,(2) View, (3) Projection.
在定义完场景的视口变换之后,你就可以准备投影变换矩阵了。再次需要提醒的是,定义变换矩阵的顺序并不是关键的。但是,Direct3D会按照世界、视口、投影的顺序设置场景的矩阵。