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

   

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

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



推荐阅读
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 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服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
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社区 版权所有