理论上来说,所有点都能只用一个“世界”坐标系来描述。 但是,对于一个特殊点a,也许不知道他在世界坐标系的位置,但可能知道他在其他坐标系的坐标。 早在两千多年前,坐标系的选择就是讨论的热点了。亚里士多德提出了“地心说”,认为地球才是宇宙的原点。阿里斯塔克斯提出了“日心说”,认为太阳才是宇宙的原点。 转换相对论:没有哪个位置,方向,坐标系能被认为优于另一个。在某种意义上,它是正确的。 《动物庄园》:所有坐标系都是平等的,但某些可能比其他的更合适。
世界坐标系(World Space)
原点,也就是世界的(0,0)点,由于某些历史原因被定于赤道与本初子午线的交点,本初子午线就是穿过英国格林威治皇家天文台的经线。 世界坐标系是一个特殊的坐标系,他建立了描述其他坐标系所需要的参考框架。从另一方面说,能够用世界坐标系描述其他坐标系的位置,而不能用更大的,外部的坐标系来描述世界坐标系。 世界坐标系也被称为全局坐标系或者宇宙坐标系。 关于世界坐标系的典型问题都是关于初始化位置和环境的,比如: 1.每个物体的位置和方向; 2.摄像机的位置和方向; 3.世界中的每一点的地形是什么(如山丘,建筑,湖泊等); 4.各物体从哪里来,到哪里去(NPC的运动策略)
物体坐标系(Object Space)
物体坐标系是和特定物体相关联的坐标系。 例如,我们每个人都带着自己的坐标系,如果我告诉您“向前走一步”,是在向您的物体坐标系发指令。 在驾驶时,别人对你说“向左”或“向东“,”向左“是物体坐标系的概念,”向东“则是世界坐标系中的概念。 某些情况下,物体坐标系也称为模型坐标系。因为模型定点的坐标都是在模型坐标系中描述的。 在物体坐标系中可能会遇到的问题,例如: 1.周围有需要相互作用的物体吗?(我要攻击它吗) 2.哪个方向?在我前面吗?我左边一点吗?右边?(我应该向他射击还是转身就跑?)
摄像机坐标系(View Space)
摄像机坐标系是和观察者坐标系密切相关的坐标系,摄像机坐标系和屏幕坐标系相似,差别在于摄像机坐标系处于3D空间中而屏幕坐标系在2D空间中。 摄像机坐标系中,摄像机在原点,x轴向右,z轴向前(朝向屏幕内或摄像机方向),y轴向上(不是世界的上方而是摄像机的上方)。 [ 关于屏幕坐标系的典型问题是哪些问题应该在屏幕上绘制出来,例如: 1.3D空间中的给定点在摄像机下方吗? 2.3D空间中的给定点是在屏幕上,还是超出了摄像机平截锥体的左,右,上,下边界?(平截锥体就是摄像机能观察到的金字塔区域) 3.某个物体是否在屏幕上?他的部分在,或全部不在? 4.两个物体,谁在前面?(该问题称作可见性检测)
惯性坐标系(Intertial Space)
为了简化世界坐标系到物体坐标系的转化,人们引入了一种新的坐标系,叫做惯性坐标系。 惯性坐标系的原点和物体坐标系的原点重合,但惯性坐标系的轴平行于世界坐标系的轴。 为什么要引入惯性坐标系呢? 因为从物体坐标系到惯性坐标系只需旋转,从惯性坐标系到世界坐标系只需要平移。
嵌套式坐标系
物体坐标系在世界坐标系中运动,很自然的会想到将世界坐标系看作”父“空间而将物体坐标系看成”子“空间。 羊右耳朵的运动,在世界坐标系是一个很复杂的轨迹,跟中它将是程序员的噩梦。通过把羊打散成嵌套式的,按层次结构组吃的对象序列,这个动作就能很容易独立计算,并通过线性变换工具(如矩阵和向量组合)起来。 若认为羊坐标系相对于世界坐标系运动,羊头坐标系相对于羊坐标系运动,羊耳朵坐标系相对于羊头坐标系运动,这样将会很方便。 层次化的嵌套坐标系是动态的,能够以最方便于表达重要信息的方式进行组织。
坐标系转换
利用惯性坐标系作为中介来转换世界和物体坐标系。 用旋转能从物体坐标系转换到惯性坐标系,用平移能从惯性坐标系转换到世界坐标系。 参考书籍:《游戏引擎架构》 《3D Math Primer for graphics and game development》