为什么OpenGL转换顺序与代码中的转换顺序相反?

时间:2018-09-29 07:31:34

标签: glm-math

previous question中,我对建立最终变换矩阵的乘法顺序感到困惑,但是我没有清楚地描述这个问题。所以我在这里创建一个新问题。

作者说:

  

在这里,我们首先绕原点(0,0,0)旋转容器,然后旋转一次   它旋转了,我们将其旋转版本翻译到右下角   屏幕的一角。 记住实际的转换顺序   应该反读:即使在代码中我们先翻译并   然后旋转,实际的变换首先应用旋转   然后是翻译。

那么,为什么要按相反的顺序应用实际的转换顺序?

我已经在网上搜索过,发现它在某个地方被提及,例如lecture03 slide的第16页和this lecture的第12页,但他们都没有描述其背后的原因< / p>

2 个答案:

答案 0 :(得分:0)

就像线性代数一样,运算顺序也相反。

答案 1 :(得分:0)

通常,这些操作是通过将给定的变换矩阵乘以模型视图矩阵(例如MV * T,其中MV是模型视图矩阵,而T是所讨论的变换)来定义的。

在变换链的末尾,几何向量在矩阵变换的累积集合上隐式右乘(例如MV * T1 * T2 * T3 * x,其中T1,T2和T3是变换(通常T1 =平移,T2 =旋转,T3 =比例),x是任何几何矢量)。因此,最后应用的变换实际上首先触摸了几何矢量(例如T3 * x)。它被有效地分组为(MV *(T1 *(T2 *(T3 * x)))),但是它当然等效于((((MV * T1)* T2)* T3)* x),因为矩阵乘法是关联的