第3章 多个坐标空间
第3.1节说明了多坐标系的必要性。
第3.2节介绍了一些常见的坐标系。介绍的主要概念有:世界空间、对象空间、相机空间、垂直空间。
第3.3节描述了坐标空间转换。
第3.4节讨论了嵌套坐标空间,通常用于在三维空间中为分层分割的对象设置动画。
3.1 为什么需要多个坐标空间?
大多数人认为在不同的情况下使用不同的坐标空间更方便。
使用多个坐标空间的原因是仅在特定的参考系中才知道某些信息。
理论上所有的点都可以用一个“世界”坐标系来表示,这可能是正确的。但是对于某一点a,我们可能不知道a在“世界”坐标系中的坐标。但是我们可以表示出与其他坐标系的相对关系(比如我知道我的电脑显示器在我的前面,但是我不知道我的电脑显示器的经纬度)。
3.2 一些有用的坐标空间
世界空间(World Space)
世界坐标系是一种特殊的坐标系,它为所有其他要指定的坐标系建立了“全局”参考系。换句话说,我们可以用世界坐标空间来表示其他坐标空间的位置,但是我们不能用任何更大的外部坐标空间来表示世界坐标空间。
世界坐标空间也被称为全局坐标空间(global coordinate space)或通用坐标空间(universal coordinate space)。
对象空间(Object Space)
对象空间是与特定对象相关联的坐标空间。
每个对象都有自己独立的对象空间。当一个对象移动或改变方向时,与该对象相关的对象坐标空间也随之移动或改变方向。
在图形的上下文中,对象空间也被称为模型空间(model space)。
对象空间也被称为体空间(body space),特别是在物理环境中。
相机空间( Camera Space)
一个特别重要的对象空间的例子是相机空间,它是与用于渲染的视点相关联的对象空间。
请注意相机空间(三维空间)和屏幕空间(二维空间)之间的区别:将相机空间坐标映射到屏幕空间坐标涉及到一种操作称为投影(projection)。
直立空间(Upright Space)
物体的直立空间是世界空间和物体空间的中间过程。直立空间的轴线与世界空间的轴线平行,但直立空间的原点与物体空间的原点重合。
物体空间和世界空间之间转换一个点需要旋转和平移,我们可以把这个过程分成两步:物体空间和直立空间之间转换(只需要旋转)和直立空间和世界空间之间转换(只需要平移)。
为什么要有直立空间,因为这以便于使用人类可读的单词(如“对象object”、“直立upright”和“世界world”,而不是明显的数学符号,如“加add”、“减subtract”和“逆inverse”。这种代码更容易读和写。
3.3 基矢量和坐标空间转换
我们讨论了两种想象坐标空间变换的有用方法:
一种方法是用坐标空间固定我们的视角。这是主动变换范式:矢量和对象随着它们的坐标的变化而移动(以相对静止的物体作为参考系)。
另一种方法是在被动变换范式中,我们保持相对于被转换的事物的固定视角,使其看起来像是我们在变换用于测量坐标的坐标空间(以自己作为参考系)。
变换对象对坐标的影响与对坐标空间进行相反的的变换具有相同的效果。比如:我(对象空间)前进3步并右移4步并向右转45度 = 世界空间向左转45度并左移动4步并后退3步。
用基矢量的线性组合表示一个三维向量
v = xp + yq + zr
p q r是三维空间的基矢量,大多数情况下,p = [1,0,0], q = [0,1,0], r = [0,0,1]。
考虑矢量r,这个矢量不在p和q形成的空间中,这意味着我们不能把它表示成一组基矢量的线性组合。换句话说,没有坐标[xp, yq]使r = xp + yq。
用来描述基矢量所跨越的空间中的维数的术语是基矢量的秩(Rank)。有n个基矢量,我们能期望的最好结果是满秩的,这意味着形成的空间是n维空间。但是秩可能小于n(当一个基矢量可以用其他两个基矢量来代替的时候,比如r = xp + yq时,即基矢量是线性相关的)。
正交基:一组相互垂直的矢量。
标准正交基:一组相互垂直的具有单位长度的矢量。
3.4 嵌套坐标空间
作用:便于计算。
可以想象羊的坐标空间相对于世界空间移动,羊的头部坐标空间相对于羊的空间移动,羊的耳朵空间相对于羊的头部空间移动。因此,我们把头部空间视为羊空间的子空间,耳朵空间视为头部空间的子空间。羊在世界空间移动羊头在转羊耳在动,直接计算羊耳的世界空间的坐标很困难,但是可以用嵌套坐标空间来递归计算(先计算羊耳在羊头的位置,再计算羊头在羊的位置,最后计算羊在世界空间的位置)。