热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

矩阵改变,平移,缩放,旋转

缩放矩阵模型比较大时,就需要把它缩小,这样就需要使用到缩放矩阵。缩放矩阵如下所示:其中的S就是缩放系数,如果要放大,就需要设置S大于0。如果要缩小,就要设置S小于1大于0。D3D里

缩放矩阵

模型比较大时,就需要把它缩小,这样就需要使用到缩放矩阵。缩放矩阵如下所示:

其中的S就是缩放系数,如果要放大,就需要设置S大于0。如果要缩小,就要设置S小于1大于0D3D里已经准备好一个设置这样缩放矩阵的函数,它就是

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轴旋转的角度。

   

上面三个矩阵只是实现了绕着三个坐标轴的旋转,如果要绕着任意轴的旋转,还需要其它函数来构造变换矩阵,比如通过向量来构造,或者通过四元数计算后再变换为矩阵。这些都很复杂的内容,以后再慢慢去掌握。

补充:先缩放,然后旋转,最后平移。



推荐阅读
author-avatar
jackiex2620
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有