了解ModelView矩阵

时间:2016-10-02 11:16:29

标签: opengl matrix transformation

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

我开始知道ModelView Matrix的起始3*3存储了旋转。 an example 'Default Payload'

如果我希望我的对象有no rotation with respect to camer,那么我的ModelView Matrix就像这样

enter image description here

如果我想要NO Translation or Scaling,如何更改我的ModelView Matrix?任何人都可以解释这背后的数学。

2 个答案:

答案 0 :(得分:2)

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

然而,因为一切(除了翻译)混合在左上角3×3部分中,从它“提取”单个变换并不是一件容易的事。要遵循的粗略步骤是:

  1. Principal axis theorem的主轴转换,找到可能已经应用的任何各向异性缩放的主轴。
  2. 分解成剪切和旋转部件。
  3. 翻译恰好位于最右边的列中。最下面的行必须是[0 0 0 1],以便在它上面的行中发生的事情以所需的方式工作。

答案 1 :(得分:1)

问题比你意识到的要困难一些。 虽然我们可以确定矩阵的元素对x轴刻度,y轴刻度,旋转,平移等有贡献,但是当迭代地应用变换时,这些元素会混淆。要重新获得组件,你必须对矩阵进行QRT分解,这将超出你的水平(不是很多,但是你不能期望理解的东西,而你对矩阵的基本理解仍然有点不稳定) 。