返回

使用OpenGL/OpenGL ES 基本变换 - 入门向量和矩阵

IOS

对于任何 3D 图形编程人员来说,确定对象位置和方向的能力都非常重要。如我们即将看到的那样,围绕原点来对象的位置,然后将对象变换到所需位置实际上非常方便。向量能够代表的第一个量就是方向,第二个量就是数量。

向量的方向通常使用单位向量表示,因为单位向量使数学计算更加容易。例如,X 轴就是向量(1, 0, 0)。在 X 方向为 +1,而在 Y 和 Z 方向均为 0。单位向量(1, 0, 0)具有长度为 1,并且沿 X 轴方向指向正方向。

向量可以用于表示许多不同的量,包括位置、方向和力。在 3D 图形编程中,向量通常用于表示对象的位置和方向。

变换是将一个对象从一个位置移动到另一个位置的操作。变换可以是平移、旋转或缩放。

平移是将对象从一个位置移动到另一个位置的操作,而无需更改对象的方向。例如,我们可以将对象沿 X 轴移动 10 个单位,使其新位置为 (10, 0, 0)。

旋转是将对象围绕一个轴旋转的操作。例如,我们可以将对象绕 X 轴旋转 90 度,使其新方向为 (0, 1, 0)。

缩放是将对象放大或缩小。例如,我们可以将对象放大 2 倍,使其新尺寸为 (2, 2, 2)。

使用向量和矩阵可以轻松地执行平移、旋转和缩放变换。在本文档的其余部分,我们将学习如何使用向量和矩阵来变换对象。

使用矩阵进行平移

平移矩阵是一个 4x4 矩阵,用于将对象从一个位置移动到另一个位置。平移矩阵的格式如下:

[1 0 0 Tx]
[0 1 0 Ty]
[0 0 1 Tz]
[0 0 0 1]

其中,Tx、Ty 和 Tz 是要平移对象的距离。

例如,要将对象沿 X 轴平移 10 个单位,我们可以使用以下平移矩阵:

[1 0 0 10]
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]

要将对象沿 Y 轴平移 20 个单位,我们可以使用以下平移矩阵:

[1 0 0 0]
[0 1 0 20]
[0 0 1 0]
[0 0 0 1]

要将对象沿 Z 轴平移 30 个单位,我们可以使用以下平移矩阵:

[1 0 0 0]
[0 1 0 0]
[0 0 1 30]
[0 0 0 1]

使用矩阵进行旋转

旋转矩阵是一个 4x4 矩阵,用于将对象绕一个轴旋转。旋转矩阵的格式如下:

[Cosθ -Sinθ 0 0]
[Sinθ Cosθ 0 0]
[0 0 1 0]
[0 0 0 1]

其中,θ 是旋转角度。

例如,要将对象绕 X 轴旋转 90 度,我们可以使用以下旋转矩阵:

[1 0 0 0]
[0 0 -1 0]
[0 1 0 0]
[0 0 0 1]

要将对象绕 Y 轴旋转 90 度,我们可以使用以下旋转矩阵:

[0 0 1 0]
[0 1 0 0]
[-1 0 0 0]
[0 0 0 1]

要将对象绕 Z 轴旋转 90 度,我们可以使用以下旋转矩阵:

[0 -1 0 0]
[1 0 0 0]
[0 0 1 0]
[0 0 0 1]

使用矩阵进行缩放

缩放矩阵是一个 4x4 矩阵,用于将对象放大或缩小。缩放矩阵的格式如下:

[Sx 0 0 0]
[0 Sy 0 0]
[0 0 Sz 0]
[0 0 0 1]

其中,Sx、Sy 和 Sz 是要缩放对象的比例因子。

例如,要将对象沿 X 轴放大 2 倍,我们可以使用以下缩放矩阵:

[2 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]

要将对象沿 Y 轴放大 3 倍,我们可以使用以下缩放矩阵:

[1 0 0 0]
[0 3 0 0]
[0 0 1 0]
[0 0 0 1]

要将对象沿 Z 轴放大 4 倍,我们可以使用以下缩放矩阵:

[1 0 0 0]
[0 1 0 0]
[0 0 4 0]
[0 0 0 1]