作者:jackiex2620 | 来源:互联网 | 2023-10-12 15:40
缩放矩阵模型比较大时,就需要把它缩小,这样就需要使用到缩放矩阵。缩放矩阵如下所示:其中的S就是缩放系数,如果要放大,就需要设置S大于0。如果要缩小,就要设置S小于1大于0。D3D里
缩放矩阵
模型比较大时,就需要把它缩小,这样就需要使用到缩放矩阵。缩放矩阵如下所示:
其中的S就是缩放系数,如果要放大,就需要设置S大于0。如果要缩小,就要设置S小于1大于0。D3D里已经准备好一个设置这样缩放矩阵的函数,它就是
D3DXMATRIX * D3DXMatrixScaling(
D3DXMATRIX * pOut,
FLOAT sx,
FLOAT sy,
FLOAT sz
);
函数的第一个参数就是返回缩放矩阵,第二个参数是沿着X轴的缩放系数,第三个参数是沿着Y轴的缩放系统,第四个是沿着Z轴的缩放系数。如果三个缩放系数都相同的,就是等比例缩放,否则就是不等比例的缩放。比如需要设置一个等比例放大两倍的矩阵,如下:
D3DXMATRIX mScale;
D3DXMatrixScaling(&mScale,2,2,2);
就可使用mScale来放大物体的模型了。
平移矩阵
在3D里平移矩阵,应是使用最多的矩阵,由于每个物体相对位置,总是通过平移矩阵来变换出来。物体的整体移动,就是坐标点的移动。比如从点(x,y,z)移动到新的位置(x', y', z'),就可以使用下面的矩阵乘法实现:
= ×
上面的表示了X轴,Y轴,Z轴的平移距离。在D3D提供了平移函数D3DXMatrixTranslation,使用这个函数就可以设置一个平移矩阵。它的具体参数如下:
D3DXMATRIX * D3DXMatrixTranslation(
D3DXMATRIX * pOut,
FLOAT x,
FLOAT y,
FLOAT z
);
第一个参数是返回平移矩阵,第二个参数是X轴的平移量,第三个参数是Y轴的平移量,第四个参数是Z轴的平移量。
比如要沿着Z轴的正方向平移5个单位,就需要按下面来设置平移矩阵:
D3DXMATRIX mTrans;
D3DXMatrixTranslation(&mTrans,0,0,5);
旋转矩阵
在现实世界里,有很多东西是转动的。比如汽车的车轮是转动的,电风扇也是转动的。当你要3D世界里显示它们时,就需要使用旋转矩阵。在3D世界里,我们使用有三个坐标轴的坐标系,因此最简单的旋转就是绕着坐标轴旋转。它们也是通过矩阵变换来实现,具体如下:
这个矩阵变换就是绕着X轴旋转,想要生这样的矩阵,使用D3D的函数D3DXMatrixRotationX,就可生成上面矩阵。它的具体参数如下:
D3DXMATRIX * D3DXMatrixRotationX(
D3DXMATRIX * pOut,
FLOAT Angle
);
第一个参数是返回绕着X轴旋转的矩阵,第二个参数是绕着X轴转动的角度,这里的单位是弧度,正的弧度是表示沿着X轴的正方向向原点看去时,物体是顺时针方向旋转。
下面是绕着Y轴旋转的变换矩阵:
任何一个点只要通过这个矩阵变换,就是绕着Y轴旋转。单位与方向判断都是跟X轴一样。
在D3D里的具体函数如下:
D3DXMATRIX * D3DXMatrixRotationY(
D3DXMATRIX * pOut,
FLOAT Angle
);
第一个参数是返回绕着Y轴旋转的矩阵。第二个参数是绕着Y轴旋转角度。
下面是绕着Z轴旋转的变换矩阵:
任何一个点只要通过这个矩阵变换,就是绕着Z轴旋转。单位与方向判断是跟X轴一样的。
在D3D里的具体函数如下:
D3DXMATRIX * D3DXMatrixRotationZ(
D3DXMATRIX * pOut,
FLOAT Angle
);
第一个参数是返回绕着Z轴旋转的矩阵。第二个参数是绕着Z轴旋转的角度。
上面三个矩阵只是实现了绕着三个坐标轴的旋转,如果要绕着任意轴的旋转,还需要其它函数来构造变换矩阵,比如通过向量来构造,或者通过四元数计算后再变换为矩阵。这些都很复杂的内容,以后再慢慢去掌握。
补充:先缩放,然后旋转,最后平移。