OpenGL glut glTranslate glRotate glScale matrices

OpenGL glut glTranslate glRotate glScale matrices

本文关键字:glScale matrices glRotate glTranslate glut OpenGL      更新时间:2023-10-16

我正在寻找矩阵的解释(或图像)以及在其上进行平移、旋转和缩放时它是如何变化的......(一个单元格带有 sin(角度),另一个单元格带有 x 坐标的平移)

现在,忽略平移,这是一个比旋转和缩放稍微棘手的概念。

思考这个问题的方法是每个矩阵定义基向量的变化。给定一个标准的坐标系,你的基向量是(1,0,0)(0,1,0)(0,0,1)。现在,我只是假设一个2D系统,正如概念所延续的那样,但它的工作更少。

我也假设专栏专业。我不记得 OpenGL 是否真的使用它,所以先检查一下,如果需要,可以选择转置矩阵。

如前所述,基向量可以以矩阵形式放置。这只是将每个向量作为矩阵中的一列。因此,要从基向量转换为基向量(即无变化),我们将使用以下矩阵。这也称为"单位矩阵",因为它不会对其输入执行任何操作(类似于 *1 是乘法的恒等式)。

2D         3D
(1 0)      (1 0 0)
(0 1)      (0 1 0)
           (0 0 1)

为了完整起见,我包含了3D版本,但这只是我将采用3D的

刻度矩阵可以看作是"拉伸"轴。如果轴是两倍大,则它们上的间隔将相距两倍,因此内容将更大。以这个为例

(2 0)
(0 2)

这会将基向量从(1, 0)(0, 1)更改为(2, 0)(0, 2),从而使整个形状表示两倍大。以示意图的方式,见下文。

 Before                   After
6|                        3|
5|                         |
4|                        2|-------|
3|                         |       |
2|--|                     1|       |
1|__|___________           |_______|______
0 1 2 3 4 5 6 7           0   1    2    3
旋转

也会发生同样的情况,尽管相反,我们起诉不同的值,旋转矩阵的值如下:

(cos(x)   -sin(x))
(sin(x)    cos(x))

这将有效地围绕角度x旋转每个轴。要真正理解这一点,请复习三角形并假设每一列都是一个新的基向量;)。

现在,翻译有点棘手。为此,我们在矩阵的末尾添加了一个额外的列,对于所有其他操作,该列在最后一行只有一个1(即它是表单的恒等式)。对于翻译,我们填写如下:

(1 0 x)
(0 1 y)
(0 0 1)

这是表单中的3D,但不是您将习惯的形式。您可以将其建模为移动 Z 基坐标(请记住,我们在这里以 2D 方式工作!),假设您的模型存在于 Z=1 处。这有效地扭曲了形状,但同样,当我们在 2D 中工作时,它是扁平的,所以我们不会感知第三维。如果我们在这里使用3D工作,这实际上是第四个维度,如下所示:

(1 0 0 x)
(0 1 0 y)
(0 0 1 z)
(0 0 0 1)

同样,"第四维度"没有被看到,但我们反而沿着它移动并扁平化。首先在 2D 空间中了解它,然后尝试进行推断会更容易。在 3D 空间中,这个第四维向量称为 w ,因此您的模型隐式位于 w=1

希望这有帮助!

编辑:顺便说一句,这个页面帮助我理解翻译矩阵。它有一些不错的图表,所以希望它会更有帮助:http://www.blancmange.info/notes/maths/vectors/homo/