【问题标题】:OpenGL glut glTranslate glRotate glScale matricesOpenGL 过剩 glTranslate glRotate glScale 矩阵
【发布时间】:2012-06-01 15:30:28
【问题描述】:

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

【问题讨论】:

    标签: c++ opengl rotation glut translate-animation


    【解决方案1】:

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

    考虑这一点的方法是,每个矩阵都定义了基向量的变化。给定一个标准坐标系,您的基向量是(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/

    【讨论】:

    • +1 为努力...不过我想要 ASCII 艺术旋转! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多