C++中用运算符重载实现矩阵运算

发布时间 : 星期一 文章C++中用运算符重载实现矩阵运算更新完毕开始阅读

是不是也很好理解呢?哈哈,这就是用运算符重载的好处。不过这种方法也确实有它的不足,而且这个不足在游戏编程中是致命的,那就是效率不高,这也正是为什么Microsoft在DirectX中也使用难看的一般函数调用来完成矩阵运算的原因。影响速度的主要原因是在使用运算符+、-、*、/等时,程序会在每次运算时创建临时对象再将临时对象返回,对于重复多次的矩阵运算来说,这无疑成为了一笔庞大的额外开销(好在现在的计算机的处理速度还算快)。但注意:在使用+=、-=、*=、/=时不会有上述问题,因为在使用这些运算符时程序只需要修改第一个对象不需要创建并返回临时对象。所以在能使用+=、-=、*=、/=时尽量不要使用单一的=、-、*、/运算符。

好了,这两个类我们已经封装好了,下面还有什么呢?是的,忘了向大家交代旋转矩阵了:

这三个就是再前面出现过的rotX、rotY、rotZ了,这些都是由数学家推导出来的,至于具体怎么推导(向量法),有兴趣的朋友可以参考计算几何相关书籍。

这篇文章到这里似乎应该结束了,不知道我是不是讲清楚了,嘿嘿 ^_^

还是按照惯例附上两个例子吧,都是旋转3D物体的例子,物体是由一些点随机生成的,具体运行效果见下图:

图1. 3D物体的旋转例子(Object3D.exe)

操作说明:

上、下键:使物体沿x轴旋转 左、右键:使物体沿y轴旋转

Delete、PageDown键:使物体沿z轴旋转 Home、End键:改变物体距视点的距离 移动鼠标:物体可以随鼠标的运动而运动

还记得,在上一篇《粒子系统的应用》中,我提到过利用粒子系统可以模拟一些特殊的

光影效果,但是我当时并没有附上例子,因为它要用到矩阵变换的一些知识,所以现在我把这个例子附上。其中包括一些放缩、模糊等技巧我会在以后的文章中涉及。

图 2. 光影效果模拟(Light.exe)

很眩吧,哈哈!!!

具体运行效果见下图:

文章中的实例在Watcom C++中调试成功,读者在运行的时候必须保证您的运行目录里有dos4gw.exe,这是一个开启保护模式的程序,如果没有程序将无法运行。

联系合同范文客服:xxxxx#qq.com(#替换为@)