




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、走进3D的世界- C+中用运算符重载实现矩阵运算 周军矩阵(Matrix)无处不在,我们的生活中到处都能找到矩阵的身影,然而此处我不想把这个定义放大,我们只讨论线性代数中的矩阵,我们要用它们来完成我们的3D变换。为什么矩阵可以完成3D变换呢?下面,我们就来介绍矩阵是如何变换坐标的:设空间中有一坐标(x,y,z),如果我们想把它变换成另一坐标(x,y,z),我们可以进行如下操作:= (x,y,z,1)这就是矩阵的妙用了。它在复杂处理变换的时候表现得尤为突出。假设我们想要把一个物体先沿z轴旋转角thetaZ,再沿x轴旋转角thetaX,我们可以进行如下操作(pseudo-code):obj*=ro
2、tX(thetaX)*rotZ(thetaZ);注意:矩阵的乘法是不可逆的,而且我们要按变化顺序的逆序进行乘法,具体推导见计算几何相关书籍。下面,我们进入正题:如何再C+中用重载运算符的方法来进行矩阵运算以完成线性变换呢?我们需要变换坐标,所以很自然地,我们需要一个向量(Vector)类;同时我们要进行线性变换,需要进行矩阵运算,所以我们还需要一个矩阵(Matrix)类。为了使我们的运算更为直观、人性化,我选用了运算符重载这以技巧而不是简单地调用函数,下面请看我的具体实现:以上便是CVector类的具体实现,我想对C+和线性代数有所了解的读者都能很清楚地理解这段代码,在次不累述。上述代码的成员
3、函数实在类外定义的,如果读者在实践中为了提高速度可以把这些成员函数定义在类内以起到内联函数的作用,可以省去参数压栈、出栈时的时间。下面是CMatrix类的具体实现:是不是也很好理解呢?哈哈,这就是用运算符重载的好处。不过这种方法也确实有它的不足,而且这个不足在游戏编程中是致命的,那就是效率不高,这也正是为什么Microsoft在DirectX中也使用难看的一般函数调用来完成矩阵运算的原因。影响速度的主要原因是在使用运算符+、-、*、/等时,程序会在每次运算时创建临时对象再将临时对象返回,对于重复多次的矩阵运算来说,这无疑成为了一笔庞大的额外开销好在现在的电脑的处理速度还算快。但注意:在使用+=
4、、-=、*=、/=时不会有上述问题,因为在使用这些运算符时程序只需要修改第一个对象不需要创建并返回临时对象。所以在能使用+=、-=、*=、/=时尽量不要使用单一的=、-、*、/运算符。好了,这两个类我们已经封装好了,下面还有什么呢?是的,忘了向大家交代旋转矩阵了: 这三个就是再前面出现过的rotX、rotY、rotZ了,这些都是由数学家推导出来的,至于具体怎么推导向量法,有兴趣的朋友可以参考计算几何相关书籍。这篇文章到这里似乎应该结束了,不知道我是不是讲清楚了,嘿嘿 _还是按照惯例附上两个例子吧,都是旋转3D物体的例子,物体是由一些点随机生成的,具体运行效果见下列图:图1. 3D物体的旋转例子操作说明: 上、下键:使物体沿x轴旋转 左、右键:使物体沿y轴旋转 Delete、PageDown键:使物体沿z轴旋转 Home、End键:改变物体距视点的距离 移动鼠标:物体可以随鼠标的运动而运动还记得,在上一篇粒子系统的应用中,我提到过利用粒子系统可以模拟一些特殊的光影效果,但是我当时并没有附上例子,因为它要用到矩阵变换的一些知识,所以现在我把这个例子附上。其中包括一些放缩、模糊等技巧我会在以后的文章中涉及。具体运行效果见下列图:图 2. 光影效果模拟很眩吧,哈哈!文章
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年物理科普活动组织试题及答案
- 食品质量评估指标与考核试题及答案
- 2025知识产权合同全书
- 2025豪华商业综合体建筑设计合同
- 营养师行业现状分析试题及答案
- 2025年公有土地使用权出让合同
- 2025供暖系统工程合同书
- 重庆工商职业学院《理论力学A》2023-2024学年第一学期期末试卷
- 信阳涉外职业技术学院《响应式Web开发技术》2023-2024学年第二学期期末试卷
- 吉林大学《陶瓷艺术制作》2023-2024学年第二学期期末试卷
- 体育康养与心理健康促进的结合研究论文
- 天津市河东区2024-2025学年九年级下学期结课考试化学试题(含答案)
- 2025技术服务合同模板
- 2025年保安证学习资源题及答案
- 公司事故隐患内部报告奖励制度
- 人教版(2024)七年级下册生物期中复习必背知识点提纲
- 大学生创新创业基础(创新创业课程)完整全套教学课件
- 信息技术培训个人研修总结(廖信崇)
- 019-注塑首件流程作业指导书
- 长江航道港口示意图
- 钢结构厂房可靠性检测鉴定报告
评论
0/150
提交评论