首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenGL glut glTranslate glRotate glScale矩阵

OpenGL glut glTranslate glRotate glScale矩阵
EN

Stack Overflow用户
提问于 2012-05-26 16:22:30
回答 1查看 1.2K关注 0票数 2

我正在寻找一个矩阵的解释(或图像),以及当将平移、旋转和缩放放在上面时它是如何变化的……(一个单元格使用sin(角度),另一个单元格使用x坐标平移)

EN

回答 1

Stack Overflow用户

发布于 2012-05-26 19:31:22

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

考虑这一点的方法是,每个矩阵都定义了基向量的变化。给定一个标准坐标系,您的基向量是(1,0,0)(0,1,0)(0,0,1)。现在,我只是假设一个2D系统,因为这些概念一直在进行,但它的工作量更少。

我也假设是列大的。我不记得OpenGL是否真的使用了它,所以先检查一下,如果需要的话,还可以转置矩阵。

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

代码语言:javascript
复制
2D         3D
(1 0)      (1 0 0)
(0 1)      (0 1 0)
           (0 0 1)

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

比例矩阵可以看作是轴的“拉伸”。如果轴是两倍大,它们的间隔将是两倍的距离,因此,内容将更大。以此为例

代码语言:javascript
复制
(2 0)
(0 2)

这会将基础向量从(1, 0)(0, 1)更改为(2, 0)(0, 2),从而使表示的整个图形的大小增加一倍。从图表上看,如下所示。

代码语言:javascript
复制
 Before                   After
6|                        3|
5|                         |
4|                        2|-------|
3|                         |       |
2|--|                     1|       |
1|__|___________           |_______|______
0 1 2 3 4 5 6 7           0   1    2    3

旋转也是如此,尽管我们使用不同的值,但旋转矩阵的值如下所示:

代码语言:javascript
复制
(cos(x)   -sin(x))
(sin(x)    cos(x))

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

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

代码语言:javascript
复制
(1 0 x)
(0 1 y)
(0 0 1)

这是3D形式,但不是您将习惯的形式。假设您的模型存在于Z=1中,您可以将其建模为移动Z基坐标(记住,我们在这里是在2D中工作!)。这有效地倾斜了形状,但同样,当我们在2D中工作时,它是扁平的,所以我们不会通过第三维。如果我们在3D中工作,这实际上是第四个维度,可以在这里看到:

代码语言:javascript
复制
(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/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10764749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档