四、顶点坐标变换和设置光照
1,顶点坐标变换
我们在计算机图形学里已经学过要显示一个三维景物模型,应用程序必须经历从世界坐标系到屏幕坐标系的转换,这里主要有三个坐标系及相应的变换:世界坐标系和模型几何变换,观察坐标系和取景变换,以及投影坐标系与投影变换。相关概念在我们大学《计算机图形学》的课程里已经有很清楚的讲解,这里主要说明在D3D中如何实现。
我个人对图形学中各种坐标变换的理解就是矩阵运算,更直接地说,就是矩阵乘法。在D3D中有一个函数IDirect3DDevice9:: SetTransform()用以设定D3D顶点变换矩阵。这个函数的第一个参数用以标识当前设定的矩阵类型(D3DTS_WORLD,D3DTS_VIEW和D3DTS_PROJECTION ),第二个参数就是矩阵的指针。用法见后面的示例代码。
I.模型几何变换
这个变换的主要工作是通过矩阵乘法完成图形平移,旋转和放缩操作,在D3D功能扩展库上提供了相应的生成函数。
D3DXMATRIXA16是D3D提供的一个变换矩阵类型,生成相关变换的矩阵如下:
D3DXMatrixTransformation()//生成一个平移变换矩阵
D3DXMatrixRotationX()//生成一个绕X轴旋转的变换矩阵
D3DXMatrixRotationY()//生成一个绕Y轴旋转的变换矩阵
D3DXMatrixRotationZ()//生成一个绕Z轴旋转的变换矩阵
D3DXMatrixScaling()//生成一个缩放变换矩阵
下面的示例代码,完成了一个绕X轴旋转的变换矩阵的设定:
D3DXMATRIXA16 matWorld;
//建立一个绕X轴动态旋转的模型几何变换矩阵
UINT iTime = timeGetTime() % 1000;
FLOAT f