热门标签 | 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轴旋转的角度。

   

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

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



推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 解决java.lang.IllegalStateException: ApplicationEventMulticaster not initialized错误的方法和原因
    本文介绍了解决java.lang.IllegalStateException: ApplicationEventMulticaster not initialized错误的方法和原因。其中包括修改包名、解决service name重复、处理jar包冲突和添加maven依赖等解决方案。同时推荐了一个人工智能学习网站,该网站内容通俗易懂,风趣幽默,值得一看。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
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社区 版权所有