坐标系的概念和坐标系之间的变换

一、坐标系的基本概念及其重要作用

坐标系是建立图形与数之间对应联系的参考系。它可以直观方便的描述图形的几何信息、大小、位置。

在计算机图形学中,从对象的建模,到在不同显示设备上显示、处理图形时会使用一系列的坐标系。例如:在屏幕上,会使用像素构成的二维坐标系来表示图形的像素值。


显示屏上的像素坐标系.png

对于一个给定的场景,我们通常并不是按照像素坐标来考虑。我们要考虑屏幕适配、组件复用、软件跨平台等等一系列工程化问题。因此,我们希望将程序中用于描述对象几何信息(形状,拓扑结构)的数值,和那些用于描述对象中大小和位置的数值区分开来。

前者通常被看作一个建模(moduling)的任务,后者是一个观察(viewing)的任务。

例如,教室里一张桌子,我们需要从不同距离和角度去描绘,并显示到屏幕。针对这个问题,我们当然可以把每次“建模-观察”的结果一一绘制到屏幕上。但是,我们需要注意到在这个过程中,桌子的几何信息客观上是固定不变的。因此,我们可以把“建模”的任务和“观察”的任务分离开来,每次绘制只需要改变观察任务的的数值即可。

当我们把“建模”与“观察”分开后,产生一个新的问题,即多坐标系问题。不同的坐标系具有它存在的必要性。

为了方便“建模”,我们给每一个建模任务构建一个自己的坐标系,叫做建模坐标系。同时,为了方便“观察”,我们也给每一个观察任务构建一个观察坐标系。为了完成某一次图形的显示,我们需要建立相应“建模”任务和相应“观察”任务的适当的映射关系,因此产生了世界坐标系的概念。为了使得计算机图形能够在特定的屏幕上正确显示,我们需要知道特定屏幕的屏幕坐标系,即设备坐标系。为了使得计算机图形能够在不同屏幕上正确显示,我们又定义了规范化坐标系。另外,对于一个大场景,我们可能只关注某一局部。因此,产生了裁剪坐标系。

二、计算机图形学中坐标系的分类

1. 世界坐标系(World coodinate system)

在系统(场景)中用于描述其他坐标系位置和对象模型位置的参考坐标系,被称为世界坐标系

在我的理解中,世界坐标系是一个特定场景中全局的、绝对的公共参照系。

注意这句话,“全局的”、“绝对的”,都是在我们所关心的特定的场景中,这个特定场景很多情况下并非真实世界或者宇宙,它可能是一间房,一个虚拟的游戏世界。

2. 建模坐标系

用于描述对象的几何信息的独立于世界坐标系的参照系,叫做建模坐标系

建模坐标系又被称为局部坐标系。一旦定义了“局部”(相对于上面提到的世界坐标系的全局)的对象,就可以很容易地将“局部”对象放入世界坐标系中,使它由局部升为全局。

3. 观察坐标系

观察坐标系主要用于从观察者的角度对整个世界坐标系中的对象进行重新定位和描述。

依据观察窗口的方向和形状在世界坐标系中定义的坐标系被称为观察坐标系

观察坐标系用于指定图形的输出范围。

对于世界坐标系来说,观察坐标系其实是一种特殊的建模坐标系。

4. 设备坐标系

适合特定输出设备输出对象的坐标系叫做设备坐标系。比如屏幕坐标系。

在多数情况下,每一个具体的显示设备,都有一个单独的坐标系统。

5. 规范化坐标系

规范化坐标系独立于设备,能够很容易地转变为设备坐标系,是一个中间坐标系。
为使图形软件能在不同设备之间移植,采用规范化坐标系,其坐标轴取值范围是[-1, 1]或[0, 1]。

三、坐标系之间的映射变换

前面提到,对于给定的问题,我们大致分为“建模”和“观察”两个任务。对于一个给定的对象模型,我们已知它在建模坐标系下的坐标,我们如何在观察坐标系下得到该对象的定位和描述。

像这种已知对象在一个坐标系的坐标,要获得该对象在另一坐标系下的坐标,我们把这一过程叫做坐标转换。而这个过程离不开世界坐标系,因为世界坐标系决定了建模坐标系与观察坐标系的映射关系。

需要注意,坐标转换过程中,对象的实际位置和状态并未发生改变,我们仅仅是使用了不同的坐标系描述对象的位置。

例下图,在一个世界坐标系Oxy中,一个点P在建模坐标系A中的坐标为(1, 1)。现在得到观察坐标系BP点的坐标。

坐标变换.png

从图中,我们可以很容易的得出,点P在观察坐标系B中的坐标为(3, 2)。然而,在实际问题中,我们不可能总能通过观察得出新的坐标,这就需要通过变换计算得到。

就这个问题,我们先要得到建模坐标系A(\alpha_1,\alpha_2)到观察坐标系B(\beta_1,\beta_2)的变换矩阵R:
\left\{ \begin{matrix} \alpha_1 \\ \alpha_2 \\ 1 \end{matrix} \right\} = R \cdot \left\{ \begin{matrix} \beta_1 \\ \beta_2 \\ 1 \end{matrix} \right\} \tag1
可以看到,坐标系A先平移向量T_1(-1,-3),再平移向量T_2(5,2),最后基于Y轴反射S(-1,1)得到坐标系B(实际应用中,连续的相同变换操作可以合并,如这里的连续平移可以合并为T_{12}(4,-1),这里为了更清晰表示变换过程——建模坐标系\rightarrow 世界坐标系\rightarrow 观察坐标系,将其拆分出来)。代入式(1)得到:
\left\{ \begin{matrix} \alpha_1 \\ \alpha_2 \\ 1 \end{matrix} \right\} = \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & -3 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & 5 \\ 0 & 1 & 2 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} -1& 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} \beta_1 \\ \beta_2 \\ 1 \end{matrix} \right\} \tag2
所以,由式(2)可知A\rightarrow B基变换矩阵:
M_{ab}= \left\{ \begin{matrix} -1& 0 & 4 \\ 0 & 1 &-1 \\ 0 & 0 & 1 \end{matrix} \right\}\tag3
由式(3)可得坐标变换矩阵M^{-1}_{ab}
M_{ab}^{-1}= \left\{ \begin{matrix} -1& 0 & 4 \\ 0 & 1 & 1 \\ 0 & 0 & 1 \end{matrix} \right\}\tag4
则,点P在坐标系B中的坐标P_1为:
P_1 = \left\{ \begin{matrix} -1 & 0 & 4 \\ 0 & 1 & 1 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 \\ 1 \\ 1 \\ \end{matrix} \right\} = \left\{ \begin{matrix} 3 \\ 2 \\ 1 \end{matrix} \right\}
同样的,我们可以得出B\rightarrow A的基变换矩阵M_{ba}为:
M_{ba}= \left\{ \begin{matrix} -1& 0 & 4 \\ 0 & 1 & 1 \\ 0 & 0 & 1 \end{matrix} \right\}\tag5
他恰好就是A \rightarrow B的坐标变换矩阵。因此,我们要求A \rightarrow B的坐标变换矩阵就可以改为求B \rightarrow A的基变换矩阵,可以少一次矩阵的逆运算。

通过这个示例,我们可以得出一个结论,计算机中,图形的显示过程就是几何(对象)模型在不同坐标系之间的映射变换。

在图中我们可以观察到,A\rightarrow B可以先经过两次平移,再经过一次反射得到,记作M_a,也可以是先经过一次反射再经过两次平移得到,记作M_b,或者更多的变换组合……,但结果肯定是惟一的。

我们尝试将式(2)中的ST_1交换顺序以实现变换M_b
\left\{ \begin{matrix} \alpha_1 \\ \alpha_2 \\ 1 \end{matrix} \right\} = \left\{ \begin{matrix} -1& 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & -3 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & 5 \\ 0 & 1 & 2 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} \beta_1 \\ \beta_2 \\ 1 \end{matrix} \right\} \tag6 \color{red}{(错误示例)}
得到的结果是:
\left\{ \begin{matrix} \alpha_1 \\ \alpha_2 \\ 1 \end{matrix} \right\} = \left\{ \begin{matrix} -1 & 0 & -4 \\ 0 & 1 & -1 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} \beta_1 \\ \beta_2 \\ 1 \end{matrix} \right\} \tag7 \color{red}{(错误示例)}
这与式(3)的结果不一致,因为矩阵点乘一般不满足交换律。可是,这与我们观察到的M_aM_b都可行的结果不一致。

其实M_aM_b两种变换顺序都没有问题,只不过我们观察变换M_b时采用的的参考系出了问题。

M_a的所有变换操作都隐藏了一个前提:基于目标坐标系(变换操作的参照系)原点的变换。如T_1(-1,-3)实际应该是:
T_1= M \cdot \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & -3 \\ 0 & 0 & 1 \end{matrix} \right\}, \text(M为单位矩阵)
M_b中第一步的反射并非基于世界坐标系Y轴的变换,而是基于Y_0(1,n)的反射,所以应该先平移T_x(-1,0),再做反射操作。正确的表达式是:
S_1= \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\}
修正后的变换过程我们记作M_c
M_c = \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & 0 \\ 0 & 1 & -3 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & -5 \\ 0 & 1 & 2 \\ 0 & 0 & 1 \end{matrix} \right\} = \left\{ \begin{matrix} -1& 0 & 4 \\ 0 & 1 & -1 \\ 0 & 0 & 1 \end{matrix} \right\}
可以看到,结果与式(3)相同。

虽然M_aM_c都可以得到正确的结果,但是为了防止出现如M_b一般的错误或为了减少计算量,在连续不同坐标系变换过程中,我们应该始终以本次变换的目标坐标系作为参考系进行先平移后作线性变换。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容