【问题标题】:How can I multiply the matrices to get to a certain location (T * R * S)如何将矩阵相乘以到达某个位置(T * R * S)
【发布时间】:2017-05-23 18:35:20
【问题描述】:

我有这张图,需要从右边的位置到左边的位置:

好吧,在 OpenGL 中这很简单,

    glTranslated(6,0,0);
    glRotated(30, 0, 0, 1);
    glScaled(2, 2, 0);

但我试图了解它在“幕后”的实际运作方式。 我要不要拿一点,比如说左下角,然后从那里开始工作?

例如:

v1 = (0,1,0,1) 第一个矩阵是翻译矩阵,所以我将它乘以 x = 6, y = 0, z = 0 的平移矩阵,得到一个新点,即 v2 = (6,1,0,1) 并从那里继续使用缩放和旋转矩阵?

问题:我需要什么齐次矩阵?

我猜它只是按顺序将 T R S 矩阵相乘,它会产生我需要的矩阵..

【问题讨论】:

    标签: opengl matrix transform homogenous-transformation


    【解决方案1】:

    矩阵乘法不可交换。这是一种奇特的说法,即平移后旋转与旋转后平移不同。如果你通过一个例子来工作,你很快就会明白。

    现在您可以使用两种约定,预乘或后乘。大多数图形系统使用不太直观的约定,因此最后应用的操作实际上是最先应用的。这样可以更轻松地处理在层次结构中向上平移的层次结构系统,您不想将其输入到旋转中,从而产生大的曲轴移动。这确实使得在手动编写一系列操作时弄清楚会发生什么变得更加困难。向后工作,最后应用旋转是一般规则。

    【讨论】:

    • 谢谢马尔科姆。很详细
    【解决方案2】:

    马尔科姆麦克莱恩所说的是真的。我只是想我会提到 TRS is 您需要的矩阵,只是您需要先将矩阵相乘,然后再将它们应用于顶点,例如TRS*v,这与做 S*(R*(T*v)) 的相反,这就是你所说的通过平移,然后旋转,然后缩放一个点来做的事情。 TLDR;组合成单个矩阵的变换以它们相乘的相反顺序应用。例如TRS*v => 缩放、旋转,然后平移 v。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多