一.Unity3d 中需要的基础数学知识(vector/matrix/transform)
看到这几个单词,我想在游戏引擎里面都挺常见的,unity3d 里面也不例外!虽然 unity 给我们封
装的这么好,会用就可以了,但是知其然,还是对自己比较有帮助的。因为以后要是该用其他的引擎了
呢?不想一辈子都被这些工具牵制的话,就必须理解这些可能会比较枯燥的数学知识了。当然这里面不
会去讨论太过复杂的数学知识,当然有兴趣,可以多看点,但是不用花费他多的时间(除了想当数学家
的除外),不明白的时候看一看就 ok 了!有了这些知识,再去看那些 unity3d 给我的数学辅助类,就
用起来就清爽很多了!
1.向量(vector)
向量有两个重要的属性长度和方向,举例子吧!在空间里面物体移动要知道物体移动的方向和距离用向
量这个数学工具就非常方便描述,还有摄像机的观察方向、光线的走向等。
在不包含位置信息,所以它可以独立于坐标系统。只要向量长度和方向相同就可以认为是相等的。引入
坐标系统不会给向量添加额外的信息。所以向量的位置不会影响他的属性。在讨论位置和向量的时候,
有一个很容易混淆的概念,就的点和向量,在 unity3d 中有时候用 vector 类描述一个点,因为 vector
里面有 x、y、z 三个 oat 变量。Vector(x,y,z)是点还是向量,要仔细斟酌。或者我理解有误,有
知道的朋友希望告知。
单位向量和向量的模这两个概念很基础也很重要。具体概念我就不重复了,但是要知道这两个向量有
什么作用。单位向量可以用来表示方向,模可以用来表示距离。我门可以用这两个概念去计算物体往哪
一个方向移动,移动距离是多少。至于物体旋转,要涉及到向量的计算,后面会提及到。
向量运算包括:加法、减法、数乘、叉积,对于运算,就不提及数学计算和概念了。百度下都知道了,
大家都是有文化的人,哈哈..开玩笑了!举例子吧!想象下你要去跟踪一个物体移动,你发现自己的跟
踪方向有了偏差,你要怎么修正的方向呢?如果你说用眼睛,那可以,但是计算机是瞎的啊!你给计算
机按个眼睛吧!计算机只会数值计算,当然你要用数学模型去表述了,然后计算啦!这时候你可以用向
量减法,画下向量减法的图像,是不是很方便就可以解决了!再举一个例子,你要去追击一个物体,他
总是东拐西拐的,我要速度比他快,但是方向不对的话是很难去拦截他下来的,那我要怎么办呢?想象
下向量加法的图形,根据两个人的速度,只要我的速度比你快,用向量加法和数乘(数乘可以用来控制
速度),我就可以在路上给你按木桩,让你撞死,守株待兔还是前途的嘛。再举一个例子,如果我想知
道目标物体,偏我的角度是多少,我可用点积,计算出我门的角度。例子还有很多,懒得举了,不然就
成举重冠军了,给个连接:
http://wenku.baidu.com/view/f279471514791711cc79176a.html
说完向量,我想提及一个小细节,很有必要的细节。因为向量的 x、y、x 是 oat 类型的。由于
oat 的不精确,我门应该认为两个浮点相等的可以存在一定的误差的。我门在看到一些游戏代码里面
两个浮点数相等可能是这样的:
Const oat EPSILON=0.001f;//误差范围
bool Equal(oat num1,oat num2)