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

[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();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值