首页 > 代码库 > 三维空间中的几种坐标系
三维空间中的几种坐标系
为什么我们需要多个坐标系统呢?任何一个坐标系统都是无限的,包括了空间中的所有点。所以,我们用任意一个坐标系统,然后规定它是“世界空间”,然后所有的点位置都可以用这个坐标系统来描述了。难道就不能更简单点了么?实践证明的答案是不能。很多人发现在不同的场景下使用不同的坐标系统更方便。
使用多个坐标系统的原因是,在一个特定的场景上下文中,可以拥有一份确定的信息。也许整个世界上的所有点都可以在一个坐标系里表示,然而,对于一个确定的顶点a,我们可能不知道它在世界坐标中的位置,但是我们可能可以明确它在相对于某些坐标系统中的位置。
比如,有两个相邻的城市A,B。A城市聪明的居民们在代价公认的一个城市的中心建立了坐标原点,然后用罗盘所指的方向来作为坐标轴,而B城市的居民可能在他们的城市中一个任意的位置建立了坐标原点,然后然坐标轴的方向在一个任意的方向,两座城市的居民都觉得他们各自的坐标系统十分便利。然而,这时候有一名工程师被分配了一个任务,要求他在两个城市之间建立第一条公路,而且需要一个地图来清楚地看两个城市以及城市间的所有细节。因此引入了更为便利的第三坐标系,这个坐标系对于两座城市的居民没有任何影响。两座城市中各自的坐标点都需要从本地坐标转换成新的坐标系的坐标来绘制新地图。
在今天开明的时代,我们习惯于在媒体上听到文化相对主义,这促使人们认为,认为一个文化或信仰系统或国家议程优于另一个文化或信仰系统是不正确的。 将想象力扩展到我们所谓的“转换相对主义”并不是太大的飞跃,即没有地方或方向或坐标系统被认为优于其他方面的论点。 在某种意义上,这是真的,乔治·奥威尔解释:“所有的坐标系统被认为是平等的,但有些是比别人更平等”。现在让我们看看一些在3D图形中常见的坐标系统。
不同的坐标系统都是有必要的,因为只有在一些特殊的场景下这些信息才是有意义和可以使用的。在这一节,将会有一些公共坐标系的例子。
世界坐标系(World space)
作者写这本书的时候在芝加哥。有一个确定的经纬度,这个经纬度是绝对的,所以,你并不需要知道芝加哥在哪里,不需要芝加哥在美国,因为这个经纬度是绝对的。在这个世界上,人们规定经度是0的地方在格林尼治天文台,纬度为0的地方在赤道。
(有一些好奇的读者可能意识到这个经纬度的坐标系并不是笛卡尔坐标系了,这是一种其他的坐标系,但是对于这次我们讨论的话题没有什么影响,我们生活在一个二维的平面上,就是地球的表面,只不过这个平面是包裹在一个球的外层的。)
世界坐标系是一个特殊的坐标系,它建立了一个全局的场景,有了这个全局的坐标系,其他的坐标系统就可以被确立了。换句话说,我们可以把在其他坐标系中的点转成世界坐标系来表示。但是我们不能用更大的坐标系来表示和包括世界坐标系了。
在非技术的角度来看,世界坐标系是建立一个我们关心的最大的坐标系统,但很多情况下这并不是整个世界,举个例子,如果我们希望渲染一个笛卡尔坐标系中的一个画面,我们会真实用到的笛卡尔坐标系就是“世界”,我们没必要关心这个世界坐标系被定位在哪里,甚至它是否存在于真实的世界中。
我们之前说了世界坐标系是用来描述点的绝对坐标的。希望你听到这样的说法的时候耳朵有些刺痛,因为你知道这不完全是真理。我们这里说的绝对坐标是指的在这个我们刚定义的最大的坐标系统中的坐标,而不是在真实的世界中的坐标。就比如之前所说的,你可能知道你现在的位置的经纬度,但是放眼整个宇宙,假设把世界坐标系的原点放在整个银河系的中心的时候,怕是没有人能说出来自己的确切位置了。
世界坐标系在很多时候也被叫作全局坐标系和宇宙坐标系。
物体坐标系(Object spce)
物体坐标系是关联了一个指定的物体,每一个物体都有一个独立的物体坐标系。当一个物体移动旋转改变了它的朝向,那么与这个物体关联的物体坐标系也随之改变了,也一起改变了朝向。比如,我们都带着自己的坐标系统,如果我们对你说“向前走一步”,我们给了你一个相对于你自己的物体坐标系的指令(请原谅我们把你说成是一个物体,其实你知道我们想表述的意思的)。我们没办法描述你要移动的绝对方向,你可能会向北移动,也可能向南移动,这些“向前”,“向后”,“向左”,“向右”对于一个物体坐标系是有意义的。当你驾车的时候,有的人给你一些指示,有时候告诉你“向左转”,还有的时候告诉你“向东走”。“向左走”是对于一个物体坐标系的,而“向东走”呢,是对于世界坐标系来说的。
位置和方向在物体坐标系也是可以被明确的。比如,当我问你你车上的杯子在哪里,你不会说在芝加哥,甚至不会说在哪条街道,在这种情况下,如果回答是一个相对于全局的位置是没有意义的,我当然希望的是你能说清楚你的杯子位于你的车的物体坐标系的哪里。
在图形学中,物体坐标系又被称作模型坐标系(model space),因为模型的顶点都是在这个模型坐标系中表示的。物体坐标系也被广泛用于物理中,比如,用身体的中轴线来当坐标轴。
相机坐标系(Camera Space)
有一个比较特殊的物体坐标系就是相机坐标系,这个坐标系是我们的视点用来渲染看到的场景所用的坐标系。在相机坐标系中,相机一直处于相机坐标系的原点,+x的方向是向右的,+z的方向是向前的(向屏幕里的方向,因为使用的是左手坐标系),+y的方向是向上。这里的像上不是世界坐标的正上,而是一个相机的上方向。可以来看一下这个相机坐标系的图片。
这里要注意一些细节,相机的坐标是三维空间,而我们在屏幕上看到的是二维的。因为我们是做了一个映射,把三维空间的东西映射到了一个二维的平面上,这个映射就是大家知道的“投影”了。
三维空间中的几种坐标系