本 Wiki 开启了 HTTPS。但由于同 IP 的 Blog 也开启了 HTTPS,因此本站必须要支持 SNI 的浏览器才能浏览。为了兼容一部分浏览器,本站保留了 HTTP 作为兼容。如果您的浏览器支持 SNI,请尽量通过 HTTPS 访问本站,谢谢!
3D math primer chapter 1
If it looks right, it is right. - The First Law of Computer Graphics.
2D 笛卡尔空间 (Cartesian Space) 是一种使用坐标系描述平面的空间。其主要的概念包含:
任意 2D 笛卡尔空间有两个特性:
这两条直线被称为 x轴 (x-axis,从左到右)、y轴(y-axis,从下到上)。但需要注意的是,坐标轴的朝向是可以任意变换的;我们唯一要提前声明的是坐标轴的正负 与轴方向的关系。这是因为无论我们为坐标轴选择了什么样的方向,我们都可以通过旋转对应的坐标空间来达到一种约定俗成的坐标轴方向(y从下往上,x从左到右),换句话说,旋转(rotate)不会扭曲原有空间。
坐标空间实际上是为了精确的定位而建立的框架。在 2D 空间中,通过一对数字(两个坐标)即可精准的指定任意该空间内位置。这一对有序的数字被称为笛卡尔坐标(Cartesian coordinates)。该对数字分别描述 x 和 y 轴上的位置。更精确的来讲,该对数字是有符号的距离(signed distance),用于描述当前位置距离远原点有多远,方向如何。描述的方式是按坐标轴的方向来描述,第一行描述在 x 轴上的位置与原点的距离,第二行描述在 y 轴上与原点的距离。
3D 笛卡尔空间较 2D 来说,需要讨论额外的几个问题:
3D 空间较 2D 多出了一个坐标轴。像 2D 一样,3D 空间中的坐标轴是两两垂直的。但与 2D 中不同,3D 中,坐标轴的方向与物理中的方向(上下左右等等)的对应关系并没有绝对的标准。同时,在 3D 空间中,任意两条坐标轴组成的平面,必与第三条坐标轴垂直。因此,如果定义了三条坐标轴的物理方向,那么就能确定空间的“地面” 在哪里。
3D 空间中,位置同样以一组有序的,3个数字的 signed distance 来描述。不同于 2D 的是,3D 空间中的距离指的是位置在某条坐标轴上的位置与其垂直的平面的 signed distance。
在 2D 空间中,任意空间是等同的。也就是说,无论x,y 如何定义正负,我们都可以将其标准化。这是因为我们可以通过旋转空间来得到标准的正方向(就好像旋转一张地图一样)。
然而在 3D 空间中却不是这样的。不是所有的 3D 空间都是等同的。一个典型例子:如果 z 轴的方向是朝向 xy 平面内部,那么我们是无法通过旋转来得到以下结果的:
因此,z 轴指向xy平面内与指向xy平面外,实际上是两个不同的空间;我们将这两种空间区分为左手空间(Left-hand coordinate space)和右手空间(Right-hand coordinate space)。可以得出结论,如果两个空间有相同的惯用手(Handedness),那么这两个空间是等同的,可以通过旋转来对齐的;反之则不可能。
左手 / 右手 空间的判定规则如下图,大拇指方向位 +x, 食指方向为 +y, 中指方向位 +z:
在左手空间与右手空间中,正方向旋转的定义也是是不同的。假设旋转围绕着一条轴(Axis of Rotation),那么如果用大拇指代表旋转轴的正方向,那么在不同的 3D 空间中有着不同的约定俗成的正方向,也就是所谓的左手/右手定理(Left-hand / Right-hand Rule):
该定理规定所有除开大拇指的手指指向的方向为旋转的正方向。
旋转轴自身可以为空间内任意的一条轴(自身可以随意旋转),并不一定是 cardinal axis (像 x、y、z一样的轴)
左手空间与右手空间可以进行任意的转化。最简单的方式是直接将某一个坐标轴的正反对调即可。Tips: