3D数学之坐标系

思考并回答以下问题:
1.为什么要使用多坐标系?
2.有哪几种坐标系?

如果你无法阅读英文,会少很多的学习资料,很多新的技术文章和视频,包括官方的教程都是英文的。数学可能在初期用的不太多,但是很多问题,包括shader学习时需要数学知识,这些你慢慢就能体会到,所以一定要把数学的基础打好。

想把Unity学好其实不是真正的只学Unity怎么用,项目大了以后非常考验编程能力,再往深处挖掘就非常考验数学和英语的基础了。

多坐标系

只要选定原点和坐标就就能在任何地方建立坐标系。但我们不能轻易做出这样的选择,而是要考虑某些具体的条件,在不同场合下可能会使用不同坐标系。

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

世界坐标系

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

关于世界坐标系的典型问题都是关于初始位置和环境的,如:

每个物体的位置和方向。

摄像机的位置和方向。

世界中每一点的地形是什么(如山丘、建筑、湖泊等)。

各物体从哪里来、到哪里去(NPC的运动策略)。

物体坐标系

物体坐标系是和特定物体相关联的坐标系。每个物体都有它们独立的坐标系。

当物体移动或改变方向时,和该物体相关联的坐标系将随之移动或改变方向。例如,我们每个人都带着自己的坐标系。如果我告诉你“向前走一步”,是在向你的物体坐标系发指令(请原谅把你比作物体?)。我们并不知道你会向哪个绝对方向移动,一些人会向北,一些人向南,另外一些人向其他方。“前”、“后”、“左”、“右”这样的概念只在物体坐标系中才有意义。当某人告诉你行驶方向时,有时候他会说“向左转”而有时候会说“向东”,“向左转”是物体坐标系中的概念,“向东”则是世界坐标系中的。

物体坐标系中也能像指定方向一样指定位置。例如,我问你车上的消声器安装在哪儿,即使你住在北京,您也不能告诉我“在北京”。我问的是“在你的车里”,它在哪儿?换句话讲,我想让你告诉我消音器在汽车中的位置。

某些情况下,物体坐标系也被称作模型坐标系。因为模型顶点的坐标都是在模型坐标系中描述的。

在物体坐标系中可能会遇到的问题,如:

周围有需要互相作用的物体吗?(我要攻击它吗?)

哪个方向?在我前面吗?我左边一点?右边?(我应该向它射击还是转身就跑?)

摄像机坐标系

摄像机坐标系是和观察者密切相关的坐标系。摄像机坐标系和屏幕坐标系相似,差别在于摄像机坐标系处于3D空间中而屏幕坐标系在2D平面里。摄像机坐标系能被看作是一种特殊的“物体”坐标系,该“物体”坐标系就定义在摄像机的屏幕可视区域。

摄像机坐标系中,摄像机在原点,x轴向右,z轴向前(朝向屏幕内或摄像机方向),y轴向上(不是世界的上方而是摄像机本身的上方)。

相机坐标系

注意,一些书中的摄像机坐标系关于轴向的约定约定可能不同,许多图形学书中习惯使用右手华标系,z轴向外。

关于屏幕坐标系的典型问题是哪些物体应该在屏幕上绘制出来。如:

3D空间中的给定点在摄像机前方吗?

3D空间中的给定点是在屏幕上,还是超出了摄像机平截锥体的左、右、上、下边界?(平截锥体就是摄像机能观察到的金字塔区域)

某个物体是否在屏幕上?它的部分在,或全部不在?

两个物体,谁在前面?(该问题称作可见性检测)

要绘制任何物体,这些问题都是很关键的。

惯性坐标系

为了简化世界坐标系到物体坐标系的转换,人们引入了一种新的坐标系,称作惯性坐标系,意思是在世界坐标系到物体坐标系的“半途”。

惯性坐标系的原点和物体坐标系的原点重合,但惯性坐标系的轴平行于世界坐标系的轴。

这里我们选择机器人的脚而不是机器人的中心作为机器人坐标系的原点

这里我们选择机器人的脚而不是机器人的中心作为机器人坐标系的原点

为什么要引入惯性坐标系呢?因为从物体坐标系转换到惯性坐标系只需旋转,从惯性坐标系转换到世界坐标系只需要平移。分开考虑着两件事比把它们合在一起容易得多。

总结

坐标系是3D数学的基础,Unity中会经常涉及各个坐标系以及坐标系之间的转换。

0%