一、常用坐标系
1. 笛卡尔坐标系
两条垂直数轴相交于一点构成的坐标系称为2D笛卡尔坐标系,而三条数轴两两垂直并相交于一点构成的坐标系称为3D笛卡尔坐标系。对于2D笛卡尔坐标系来说,某一轴向坐标系通过翻转都可以得到其它不同轴向的坐标系,所以我们说所有的2D笛卡尔坐标系都是“等价”的。但是3D笛卡尔坐标系通过翻转等操作,仍有某个轴的反向坐标系不能得到。通过观察发现,当某两个轴的方向确定时,另外一个轴的正反两个方向分别确定了两个坐标系——左手坐标系和右手坐标系。
在3D笛卡尔坐标系中,有48种不同轴向的坐标系,其中24种为左手坐标系,另外24种为右手坐标系。左手坐标系的某个轴向坐标系可以通过旋转得到另外23种轴向坐标系,所以这24种轴向坐标系是“等价”的;右手坐标系亦相同。左右手坐标系只有某个轴向相反,所以通过只翻转一个轴的正负号,可以实现简单的坐标转换。一般使用场景中,图形学常使用左手坐标系,比如UE4的世界场景坐标系;而在线代数学中使用右手坐标系。所以在数学计算时,注意区分坐标系,否则无法得到正确结果。
2. 极坐标系
在平面上取定一点O,称为极点。从O出发引一条射线Ox,称为极轴。再取定一个单位长度,通常规定角度取逆时针方向为正。这样,平面上任一点P的位置就可以用线段OP的长度ρ以及从Ox到OP的角度θ来确定,有序数对(ρ,θ)就称为P点的极坐标,记为P(ρ,θ);ρ称为P点的极径,θ称为P点的极角。
二、建立坐标系
1. 世界坐标系
世界坐标系是相对于整个世界建立起的坐标系,所有物体(Actor)在世界场景中都有相对于世界坐标系的绝对坐标位置,也可以描述世界场景中其他坐标系的位置。
2. 惯性坐标系
惯性坐标系是在单个物体(Actor)上建立的坐标系,它的坐标轴平行于世界坐标系。并且,惯性坐标系和下面的物体坐标系为同一个原地。因为惯性坐标系的轴平行于世界坐标系,所以我们可以通过平移惯性坐标系得到世界坐标系。
在UE4的场景中,我们把视窗的坐标系设置为“World”,此时,当我们选中物体时,显示在物体上的坐标系就是物体的惯性坐标系。
3. 物体坐标系
物体坐标系也是在单个物体(Actor)上建立的坐标系。与惯性坐标系不同的是,它坐标轴并不一定平行于世界坐标系,而是一个完全独立的坐标系。因为物体坐标系和惯性坐标系使用同一个坐标原点,所以通过旋转物体坐标系可以得到惯性坐标系。
而当我们将坐标系设置为“Local”,选中的物体则显示物体坐标系。
4. 坐标系嵌套
在世界场景中,我们建立一个世界坐标系,每个物体都有相对于世界坐标系的绝对位置。而物体上的组件在世界坐标系中也有一个绝对坐标。但是在很多应用场景中,我们很难直接计算物体组件的绝对坐标。比如,当世界场景中的人抬起胳膊时,如果同时计算胳膊和手的实时绝对坐标,事情会变得复杂。而把胳膊和手看做一个整体,并建立坐标系,我们只需要计算此坐标系在世界坐标系中的绝对坐标即可,而手相对于此坐标系的位置却是不变的,所以可以直接将此物体坐标位置加手相对此坐标的位置即可得出手在世界坐标系中的实时变化的绝对位置。而如果手也同时进行变化时,也可以直接根据此坐标系去计算也方便很多。在世界坐标系中建立物体坐标系的方法,就叫坐标系的嵌套。在物体上建立的坐标系可以看做是世界坐标系空间中的子空间或子坐标系。保存物体坐标系的信息时,需要记录两个数据,一个是物体坐标原点的绝对位置和物体坐标系的轴向。
5. 摄像机坐标系
摄像机坐标系与2D屏幕坐标系也有很大关系。摄像机坐标系是定义在摄像机的屏幕可视区域的特殊坐标系,一般以摄像机为原点,x轴向右,z轴向前(摄像机朝向),y轴向上(摄像机上方,而不是世界坐标的上方)。它是以观察者的角度建立起来的坐标系。将物体转换到2D屏幕上是通过投影过程转换得到的,投影相关知识后面再总结补充。
三、坐标转换
上面讲了世界坐标系、惯性坐标系和物体坐标系,在实际使用中,我们经常需要进行坐标转换。我们常用的坐标系是世界坐标系和物体坐标系,而惯性坐标系是世界坐标和物体坐标转换的一个媒介坐标系。
若已知一个组件的相对位置(即物体坐标系位置),可以通过旋转物体坐标系与惯性坐标系重合得到其在惯性坐标系中的坐标,而将惯性坐标系平移与世界坐标系重合,又可以得到其在世界坐标系的绝对坐标。所以通过一个惯性坐标系,相对坐标可以通过旋转、平移得到其绝对坐标;而绝对位置通过平移、旋转得到相对坐标。