3D数学知识

一、坐标系

U3D中有四种坐标系:模型坐标系,世界坐标系,摄像机视坐标系,屏幕投影坐标系。并采用左手坐标系。首先将模型坐标系通过计算变换(即矩阵运算)为世界坐标系,再变换成摄像机坐标系,最后计算出屏幕投影坐标系,生成game窗口的图像。

3D max采用的是右手坐标系,将3Dmax模型导入U3D之后,会绕X轴旋转了-90°。


二、投影

相机投影有两种方式,分为:正交投影与透视投影。正交投影,与原来的模型等同,没有纵深,不会随着你的视角的距离变大而缩小。透视投影则有纵深,会给人一种在2D平面上上看出3D的效果,即近大远小的变化,原理就是小孔成像。


三、向量运算

基于向量V1(v1,v2),V2(v3,v4),数域内n:

向量数乘

V3 = n*V1    作用:向量规范化,即量除以自身的模长.规范化之后,V1规范化之后,V1*1.0/sqrt(v1*v1,v2*v2)

向量点积

Dot(V1,V2) = V1*V2 = v1*v3 + v2*v4  作用:点积的结果是一个标量值。 几何意义:Dot(V1,V2) = ||V1||*||V2||*COS(a),则COS(a) = Dot(V1,V2)/( ||V1||*||V2||).

若cos(a) < 0时,V1与V2的夹角 大于90度;若cos(a)= 0时,V1与V2的夹角等于90度,即正交,若1>cos(a) > 0时,V1与V2的夹角 小于于90度。若cos(a) =1时,V1与V2的夹角 等于0度。


当将V1,V2单位化之后,即将V1,V2的模长为1,此时cos(a) = Dot ( V1 , V2 ),所以二者的夹角 a = arc(Dot ( V1 , V2 )) .


向量投影

向量V2 在V1上的投影为||V2||.cos(a) =   Dot(V1,V2)/ ||V1||.

投影的目的,是将向量分解为,平行和垂直于其他向量的两个分量.


向量叉积



(1)两个向量叉积,V3 =Cross(V1,V2) ,则V3垂直于V1,V2.也就是,即V3是V1,V2所在平面的法向量。



叉积的顺序会影响法向量的方向。如:V1 = (1,0,0),V2(0,1,0)。Cross(V1,V2) = (0,0,1),法向量为正方向,若Cross(V2,V1) = (0,0,-1),则法向量为负方向。

当法向量为正方向时,则渲染器显示V1,V2所在的平面。当法向量为负方向时,则渲染器V1,V2所在平面不显示。法向量为负方向时,这说明该模型面背对着窗口,因此不显示。

(2)||Cross(V1,V2)|| = ||V1||*||V2||.sin(a),得到的数值是以向量V1,向量V2为两边的平行于四边形的面积.

(3)如果向量V1,V2平行或任意一个为0,则 Cross(V1,V2) = 零向量。即它平行于任意其它的向量


四、变换

1.平移矩阵,与向量V相乘后,可以使向量V的x,y,z分量分别变化Px,Py,Pz.
2.旋转矩阵可以让向量沿着某个轴向旋转一定的角度。具体参考链接如下: http://blog.csdn.net/ningyaliuhebei/article/details/7481679
3.缩放矩阵可以对向量的各分量进行缩放。

矩阵变换可以通过矩阵乘法进行组合,用一个矩阵就可以表示一组变换操作。例如现有向量v,平移矩阵T,旋转矩阵R,缩放矩阵S,另有组合矩阵M=SRT,则有:vSRT=vM,向量v乘以矩阵M相当于一次对v进行缩放、旋转和平移。Unity使用Matrix4x4类来描述4x4矩阵。在Unity中为了简化脚本编写,对向量的常用操作在Vector3类和四元数Quaternion类中已经提供了对应的方法。在Unity中,Matrix4x4仅在Transform、Camera、Material和GL等几个类的函数中用到。

齐次坐标:在3D数学中,齐次坐标就是将原本三维的向量(x,y,z)用四维向量(Wx,Wy,Wz,w)来表示。
引入齐次坐标主要有如下目的:
(1) 更好地区分向量和点。在三维空间中,(x,y,z)既可以表示点可以表示分量,不便于区分,如果引入其次坐标,则可以使用(x,y,z,1)来表示坐标点,而使用(x,y,z,0)来表示向量。
(2) 统一用矩阵乘法表示平移、旋转、缩放变换。如果使用3*3的矩阵,矩阵乘法只能表示旋转和缩放变换,无法表示平移变换。而在4D齐次空间中,可以使用4*4齐次矩阵来统一表示平移、旋转、缩放变换。
(3) 当分量w=0时可以用来表示无穷远的点。
齐次坐标是计算机图形学中一个非常重要的概念,但是在Unity中很少需要直接和它打交道,在编写一些Shader可能会用到它,平时在脚本中主要还是使用三维向量Vector3.Unity通过便利的接口设计将这一重要概念隐藏在了引擎后面。

参考连接:http://blog.csdn.net/leaf6094189/article/details/18554549

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值