【问题标题】:Understanding the ModelView Matrix了解模型视图矩阵
【发布时间】:2016-10-02 20:06:50
【问题描述】:

我想分析我的4*4 ModelView 矩阵的每个组件。

我知道 ModelView Matrix 的起始3*3 存储旋转。

如果我希望我的对象拥有no rotation with respect to camera,那么我的 ModelView 矩阵看起来像这样

如果我想要NO Translation or Scaling,如何更改我的 ModelView 矩阵?谁能解释一下这背后的数学原理。

【问题讨论】:

    标签: opengl matrix transformation


    【解决方案1】:

    左上角的 3×3 定义了坐标系的基向量。它不仅仅是旋转,还有缩放、剪切和类似的东西。想象三个橡胶腿,您可以向任何方向伸展和倾斜。这就是左上角 3×3 的作用。如果要旋转坐标系,则将标记为 X、Y、Z 的树腿分别旋转到要在另一个坐标系中由该名字对象表示的方向。如果你想缩放东西,你伸展每条腿。如果你让它们不垂直,东西就会被剪掉。这就是它的全部内容。

    但是,由于所有内容(翻译除外)都混合在左上角的 3×3 部分中,因此从中“提取”单个转换并非易事。要遵循的粗略步骤是:

    1. 通过Principal axis theorem 进行主轴变换,以查找可能已应用的任何各向异性缩放的主轴。
    2. 分解成剪切和旋转部分。

    翻译恰好位于最右列。最下面的行必须是 [0 0 0 1] 以便在它上面的行中发生的事情以所需的方式工作。

    【讨论】:

    【解决方案2】:

    这个问题比你想象的要难一些。 虽然我们确实可以将矩阵的元素识别为对 x 轴缩放、y 轴缩放、旋转、平移等有贡献,但随着变换的迭代应用,这些元素会混淆。要取回组件,您必须对矩阵进行 QRT 分解,这将超出您的水平(不多,但这不是您可以期望理解的东西,而您对矩阵的基本理解仍然有点不稳定) .

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多