首页 > 解决方案 > 为什么 OpenGL 转换顺序与代码中写的相反?

问题描述

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

作者说:

在这里,我们首先围绕原点 (0,0,0) 旋转容器,一旦旋转,我们将其旋转后的版本平移到屏幕的右下角。请记住,实际的变换顺序应该相反:即使在代码中我们先平移然后旋转,实际的变换首先应用旋转然后平移。

那么,为什么实际的转换顺序是以相反的顺序应用的呢?

我在网上搜索过,发现在某个地方提到过这个问题,比如 这个演讲03幻灯片的第16页和这个讲座的第12页,但他们都没有描述背后的原因

标签: glm-math

解决方案


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

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


推荐阅读