本来这两天是准备动手写3ds max的导出插件的,但看着看着,感觉到自己的数学根基不稳,所以干脆从自己的数学库写起。
看到3D,有时真的对数学感触很深。究竟学数学的意义是什么呢?记得在上大学以前,数学的用途就仿佛只有考试和竞赛,身边的同学都是带着功利心和分数的压力去学,去做题,而老师更是受学校要求的“威迫利诱”一遍一遍地压着学生。真的很恐怖,也很悲凉。
但上了大学就不同了,凡是要用程序来解决一些问题,或者是实现某些功能和效果,都需要数学建模,毕竟计算机是建立于0/1数学之上的吧。现在看到自己的数学知识换成一行行代码,一个个模块时,心里真的有种满足感和幸福感。
这个数学库我是参考《3D数学基础:图形与游戏开发》的内容来写的。这本书真的有很强的针对性和实践性,其中某些运算都把代码给出来了。记得有一个老师说过,尽管这是人家的程序,但如果你把它消化掉,那些东西就是你自己的了。另外,这本书也有不少让我怀疑的地方,但愿我能改正,并用实践去证明正确性。写完这个后,再跟野猪哥哥的那个数学库对比对比,我答应过给他找bug的。^_^
这个数学库主要实现的运算有:
3维向量:取反、加减、点积、叉积、求模、标准化、向量投影、两个向量夹角的余弦和正弦等;
欧拉角:转换到限制集、物体-惯性或惯性-物体四元数转换成欧拉角;
四元数:叉积、点积、构造关于X,Y,Z和任意轴的转动的四元数、提取旋转轴和旋转角、Slerp、共轭、求幂、正规化、Squad、用欧拉角构造物体-惯性旋转的四元数
4x3矩阵:平移、执行父空间<-->局部空间变换、绕任意轴旋转、沿任意轴缩放、切变、投影、沿任意平面反射、矩阵乘法、求逆
完成这些后,就着手写max的导出插件(之前酝酿得也差不多了),然后写mesh导入,还有AABB。。
差点忘了纹理的导入和映射!
It's so amazing!