Unity学习:3D数学基础知识

来源:互联网 发布:有神网络 编辑:程序博客网 时间:2024/05/17 07:49
一、3D坐标系
笛卡尔坐标系。分为 左手坐标系和右手坐标系。
按照X,Y,Z的顺序表示坐标。
1.全局坐标系(世界坐标系)
坐标原点(0,0,0),例(1,2,1)
2.局部坐标系(模型坐标系,物体坐标系)
每个物体有自己独立的坐标系,并且随物体进行相同的移动和旋转。模型mesh中保存的顶点坐标,均为局部坐标系下的坐标。
建立父子关系,子物体的坐标系以父物体的坐标点为自身的坐标原点。
3.相机坐标系
根据观察位置方向建立的坐标系。使用此坐标系可以方便的判断物体是否在相机前方以及物体之间的先后遮挡顺序等。
4.屏幕坐标系
建立在屏幕上的二维坐标系,用来描述像素在屏幕上的位置

Unity中,Transform组件的
Transform.TransformPoint 方法可以将坐标点从局部转换到全局坐标系
Transform.InverseTransformPoint 可以讲坐标点从全局坐标系转换到局部坐标系。
Transform.TransformDirection用于对向量从局部坐标系转换到全局
Transform.InverseTransformDirection从全局坐标系转换到局部坐标

Transform.TransformDirection 变换方向
function TransformDirection (direction : Vector3) : Vector3
Description描述
Transforms direction from local space to world space.
从自身坐标到世界坐标变换方向。
This operation is not affected by scale or position of the transform. The returned vector has the same length as direction.
这个操作不会受到变换的缩放和位置的影响。返回的向量与direction有同样的长度。


二、向量 Vector
向量又称矢量,在数学里,既有大小又有方向的量,就是向量。在几何中,向量可以用一段有方向的线段来表示。
1.向量的运算
1)加减:向量的加减为 各分量分别相加减,在物理上可以用来计算两个力的合力,或者几个速度分量的叠加
2)数乘:向量与一个标量相乘为数乘。数乘可以对向量的长度进行缩放,如果标量小于0,向量的方向会变反方向。
3)点乘:两个向量点乘得到一个标量,数值等于两个向量长度相乘后再乘以二者夹角的余弦。
a•b = ax*bx + ay*by 
=  (|a|*sinθ1) * (|b| * sinθ2) +   (|a| * cosθ1) * (|b| * cosθ2)
= |a||b|(sinθ1*sinθ2 + cosθ1*cosθ2)
=|a||b|(cos(θ1-θ2))
= |a||b|cosθ

通过两个向量的点乘结果符号,可以快速判断两个向量的夹角,
若:U·V = 0,则U,V互相垂直
若:U·V > 0,则U,V夹角小于90度
若:U·V < 0,则U,V夹角大于90度a
点乘的几何意义是:是一条边向另一条边的投影乘以另一条边的长度
平行四边形,面积相等,cos点乘满足 :交换律a·b=b·a ,分配率a·(b+c) = a·b + a·c

4)叉乘:两个向量的叉乘得到一个新的向量,新向量垂直于原来两个向量,并且长度等于原来两个向量长度相乘后,再乘夹角的正弦值
可用左手拇指和食指来代表UV,中指则为叉乘向量的方向
另外叉乘不满足交换律:UxV ≠ VxU
2.Vector3类
Unity中和向量有关的类有:Vector2,Vector3,Vector4,分别对应不同维度的向量。其中Vector3使用广泛。
三、矩阵
矩阵是一个矩形阵列,有指定的行和列,使用矩阵可以简化数据的表示变换处理
M × N的矩阵是一个具有M行、N列的矩形数组,行数和猎术分别为矩阵的维度。Unity中常用4X4矩阵,它可以描述向量的平移,旋转,缩放等所有线性变换
平移矩阵,
旋转矩阵,
缩放矩阵

四、齐次坐标
将原本三维向量的(x,y,z)用四维向量(Wx,Wy,Wz,W)来表示。
目的1区分向量和点(x,y,z,1)来表示坐标点,(x,y,z,0)表示向量
2统一用4X4矩阵乘法来表示平移旋转和缩放变换。
3当分量w=0时,可以用来表示无穷远的点。

五、四元数
四元数包含一个标量分量和一个三维向量分量
Q可以计作:Q = [w,(x,y,z)]
四元数用表示旋转
(其余两种旋转表示方法:欧拉角和矩阵)

原创粉丝点击