[Unity3D学习]3D数学基础之座标系



以前都是做2D游戏,基本不关注数学方面的知识。现在学习unity了,很多概念都不懂。学生时代的东西,早还给老师了。当然我学习不好 = =!所以现在来补补。毕竟现在要做3D了。基础的东西还是得懂。

下面是我看书的一些重点、我将其记录下来。以后也方便自己温习!

笛卡尔座标系 的定义 :

1、每个2D笛卡尔座标系都有一个特殊的点,称为原点(0,0)它是座标系的中心。

2、每个2D笛卡尔座标系都有两条过原点的直线向两边无限延伸,称为,两个轴互相垂直。

笛卡尔座标系定位

座标系是一个精确定位点的框架。为了在笛卡尔座标系中定位点,引入了笛卡尔座标的概念。在2D平面中,两个数(x,y)就可以定义一个点。座标的每个分量都表明了该点与原点之间的距离和方位,每个分量都是到相应轴的有符号距离。如下图所示,x分量表示该点到y轴的有符号距离,同样y分量表示该点到x轴的有符号距离。“有符号距离”指在某个方向上距离为正,而在相反方向为负。

26102602-9b618c876e1944ecb5236d5a906c8b0b

3D座标系:

3D座标系表示三维空间系,3D座标系存在三个轴,比2D座标系多了一个Z轴,3个轴相互垂直,也就是没个轴都有垂直于其他两个轴。在3D座标系中点位需要3个数:x、y、z.

26102602-9b618c876e1944ecb5236d5a906c8b0b

左手座标系、右手座标系:

3d座标系存在两种完全不同的座标系,左手座标系和右手座标系。如果属于相同的座标系,可以通过旋转来重合,否则是不可以重合的。两个座标系之间没有好坏,之是应用与不懂的场景。 计算机中使用左手座标系,线性代数中使用右手座标系。

多座标系:

为什么使用多座标系?因为在不同的情况下使用不同的座标系更加的方便。某些信息只有在特定的上下文环境中获得。

一些有用的座标系:

1、世界座标系:是一个特殊的座标系,它建立了描述其他座标系所需要的参考框架,另一方面说,能用时间座标系描述其他座标系的位置,而不能用更大的座标系来描述世界座标系。

2、物体座标系特定物体相关联的座标系。当物体位移或改变方向时,和该物体相关的座标系也随之移动和改变方向。比如告诉你“向前走一步”,则是向你的物体座标系发指令。“前”、“后”、“左”、“右”这样的概念只有物体座标系才有意义。“向左转”是物体座标系,“向东”则是世界座标系。有时物体座标系也称作模型座标系,模型顶点的座标都是在模型座标系中描述的。

3、摄像机座标系观察者密切相关的座标系。摄像机座标系被看作是一种特殊的物体座标系,该物体座标系定义摄像机的屏幕可视区域。在摄像机座标系中,摄像机在原点,x轴向右,z轴向前,y轴向上。一个摄像机座标系如下图所示。关于摄像机座标系的轴向约定可能不同。许多图形学书中习惯用右手座标系,z轴向外,即从屏幕指向读者。2D屏幕上显示的内容就是3D摄像机座标系通过投影转换呈现的。

26102602-9b618c876e1944ecb5236d5a906c8b0b

4、惯性座标系:为了简化世界座标系到物体座标系之间的转换,才有了惯性座标系。惯性座标系的原点和物体座标系的原点重合,但惯性座标系的轴平行于世界座标系轴。所以从物体座标系转换为惯性座标系只需要旋转,从惯性座标系到世界座标系只需要平移。

26102602-9b618c876e1944ecb5236d5a906c8b0b

5、嵌套座标系:3D虚拟世界中每个物体都有自己的座标系———-自己的原点和座标轴。每个模型都有自己的原点和座标轴,模型的子物体就是在这个嵌套座标系中。

 

物体座标系到世界座标系的转换:

26102602-9b618c876e1944ecb5236d5a906c8b0b

1、旋转物体座标系到惯性座标系。将物体座标轴旋转到与惯性座标系重合。

26102602-9b618c876e1944ecb5236d5a906c8b0b

2、将惯性座标系原点平移至世界座标系。

26102602-9b618c876e1944ecb5236d5a906c8b0b

关于Unity的一些座标系的知识:

Unity是左手座标系

世界座标系:我们在场景中添加物体(如:Cube),他们都是以世界座标显示在场景中的。transform.position可以获得该位置座标。

屏幕座标系:以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。注:鼠标位置座标属于屏幕座标,Input.mousePosition可以获得该位置座标,手指触摸屏幕也为屏幕座标,Input.GetTouch(0).position可以获得单个手指触摸屏幕座标。

绘制GUI界面的座标系:这个座标系与屏幕座标系相似,不同的是该座标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。

视口座标系:视口座标是标准的 相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。

世界座标→屏幕座标:camera.WorldToScreenPoint(transform.position);这样可以将世界座标转换为屏幕座标。其中camera为场景中的camera对象。

屏幕座标→视口座标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕座标转换为视口座标。其中camera为场景中的camera对象。

视口座标→屏幕座标:camera.ViewportToScreenPoint();

视口座标→世界座标:camera.ViewportToWorldPoint();

发布了45 篇原创文章 · 获赞 4 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章