如何将矩阵乘以到达某个位置(T * R * S)

时间:2017-05-23 18:35:21

标签: opengl matrix transform homogenous-transformation

我有这张照片,我需要从右边的位置房子到左边的位置房子:enter image description here

嗯,在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矩阵,它会产生我需要的矩阵..

2 个答案:

答案 0 :(得分:1)

矩阵乘法不是可交换的。这是一种奇特的说法,即旋转后跟随旋转而不是旋转后跟翻译。如果你通过一个例子,你很快就会明白这个想法。

现在您可以使用两种约定,预乘或后乘。大多数图形系统使用不太直观的约定,因此最后应用的操作实际上首先应用。这样可以更轻松地处理层次结构系统,这些层次结构系统在层次结构中高位转换,您不希望将其转换为旋转,从而创建大的曲轴移动。这确实使得解决手动编程操作序列时发生的事情变得有点困难。向后工作,最后应用轮换是一般规则。

答案 1 :(得分:1)

Malcom McLean说的是真的。我只是想提一下,TRS 你需要的矩阵,只需要先将矩阵相乘,然后再将它们应用到顶点,例如: TRS * v,与S *(R *(T * v))相反,这就是你所说的翻译,然后旋转,然后缩放一个点。的 TLDR;组合成单个矩阵的变换以它们的乘法的相反顺序应用。例如TRS * v =>缩放,旋转,然后翻译v。