http://candycat1992.github.io/unity_shaders_book/unity_shaders_book_chapter_4.pdf

笛卡尔坐标系

笛卡尔坐标系(Cartesian Coordinate System)

2d_cartesian

2d_cartesian_opengl_directx

3d_cartesian.png

基矢量(basis vector):三维笛卡尔坐标系的三个坐标轴。

标准正交基(orthonormal basis):基矢量相互垂直且长度为1。

正交基(orthogonal basis):坐标系中坐标轴之间相互垂直但长度不为1.

左手坐标系(left-handed coordinate space)、右手坐标系(right-handed coordinate space)

left_hand

right_hand

同一种坐标系有相同的旋向性(handedness)

左手法则(left-hand rule)、右手法则(right-hand rule):在左手坐标系中,举起左手,握拳,伸出大拇指指向旋转轴的正方向,剩下4个手指弯曲的方向就是旋转的正方向。右手坐标系使用相似的判断方法。

left_right_hand_rule

Unity的坐标系

unity_cartesian.png

在模型空间和世界空间中,Unity使用的是左手坐标系。

unity_camera_cartesian

在观察空间中,Unity使用的是右手坐标系。观察空间就是以摄像机为原点的坐标系,摄像机的前向是Z轴的负方向,Z轴越小,物体的深度越大,离摄像机越远。

点和矢量

矢量(vector)是n维空间中一种包含了模(magnitude)和方向(direction)的有向线段。它是为了和标量(scalar)区分开来提出的。标量是只有模没有方向。

vector

矢量的头(head)指的是箭头所在的端点处,尾(tail)指的是另一个端点。矢量被用于表示相对于某个点的偏移(displacement)。

点和矢量的关系

矢量的加减

三角形定则(triangle rule):矢量尾对尾,指向被减者;矢量头对头,指向减者。

vector_scalar

vector_add_sub

vector_displacement

矢量的模(magnitude)

vector_magnitude

单位矢量(unit vector)

也被称为归一化的矢量(normalized vector)。

矢量的点积(dot product)

矢量的点积满足交换律,它的结果是一个标量,矢量点积的几何意义是投影(projection)。

点积的符号:

dot_sign

矢量的叉积(cross product)

矢量的叉积不满足交换律,也不满足结合律,但是满足反交换律,它的结果是一个矢量。

vector_cross_diagram

三维矢量叉积的计算规律。不同颜色的线表示了计算结果矢量中对应颜色的分量的计算路径。以红色为例,即结果矢量的第一个分量,它是从第一个矢量的y分量出发乘以第二个矢量的z分量,再减去第一个矢量的z分量和第二矢量的y分量的乘积

叉积最常见的应用就是计算垂直于一个平面、三角形的矢量。还可以用于判断三角面片的朝向。