gpt4 book ai didi

c++ - OpenGL glut glTranslate glRotate glScale 矩阵

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:43 25 4
gpt4 key购买 nike

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

最佳答案

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

考虑这一点的方法是每个矩阵定义基 vector 的变化。给定一个标准坐标系,您的基 vector 是 (1,0,0)(0,1,0)(0,0, 1)。现在,随着概念的贯彻,我将假设一个 2D 系统,但它的工作较少。

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

如前所述,基 vector 可以用矩阵形式表示。这只是将每个 vector 作为矩阵中的一列。因此,要从基 vector 转换为基 vector (即不变),我们将使用以下矩阵。这也称为“单位矩阵”,因为它不会对其输入做任何事情(类似于 *1 是乘法的单位矩阵)。

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

为了完整起见,我已经包括了 3D 版本,但这就是我将采用 3D 的情况。

比例矩阵可以看作是“拉伸(stretch)”轴。如果轴是两倍大,则它们之间的间隔将是两倍远,因此内容会更大。以此为例

(2 0)
(0 2)

这会将基 vector 从 (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 旋转每个轴。要真正理解这一点,复习一下你的三角函数并假设每一列都是一个新的基础 vector ;)。

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

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

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

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

同样,“第四维度”是看不见的,但我们却沿着它移动并变平了。首先在 2D 空间中了解它更容易,然后再尝试推断。在 3D 空间中,这个第四维 vector 称为 w,因此您的模型隐式位于 w=1

希望这对您有所帮助!

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

关于c++ - OpenGL glut glTranslate glRotate glScale 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10764749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com