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