我正在学习一些教程来学习openGL(如果它有任何不同,请访问www.opengl-tutorial.org)并且有一个练习要求我在屏幕上绘制一个立方体和一个三角形,它表示为暗示我应该计算两个MVP矩阵,每个对象一个。 MVP矩阵由Projection * View * Model给出,据我所知,投影和视图矩阵对于屏幕上的所有对象都是相同的(它们仅受我选择的“相机”位置和设置的影响)。但是,模型矩阵应该改变,因为它应该给我在全局坐标中的对象的坐标和旋转。在教程之后,对于我的立方体,模型矩阵只是单位矩阵,因为它位于原点并且没有旋转或缩放。然后我绘制我的三角形,使其顶点位于(2,2,0),(2,3,0)和(3,2,0)。现在我的问题是,我的三角形的模型矩阵是什么?
我自己的推理说,如果我不想旋转或缩放它,模型矩阵应该只是翻译矩阵。但是这里的翻译坐标是什么?它应该包括其中一个顶点的位置还是三角形的中心或者是什么?或者我完全误解了模型矩阵是什么?
答案 0 :(得分:3)
模型矩阵与其他矩阵(投影,视图)一样,具有相同布局的4x4矩阵。根据您是使用列向量还是行向量,矩阵由本地帧的x,y,z轴和指定转换部分的t1,t2,t3向量组成
因此对于列向量p,变换矩阵(M)看起来像
x1, x2, x3, t1,
y1, y2, y3, t2,
z1, z2, z3, t3,
0, 0, 0, 1
p'= M * p
因此对于行向量,您可以尝试找出矩阵布局必须如何。另请注意,如果您有行向量p'= p * M。
如果没有旋转分量,则本地帧的x,y,z轴通常为模型矩阵的3x3子矩阵的行。
1 0 0 t1 -> x axis
0 1 0 t2 -> y axis
0 0 1 t3 -> z axis
0 0 0 1
第四列指定平移向量(t1,t2,t3)。如果你有一个点p =
1,
0,
0,
1
在局部坐标系中,你希望它在z方向上翻译+1,将它放在世界坐标系中,模型矩阵就是:
1 0 0 0
0 1 0 0
0 0 1 1
0 0 0 1
p'= M * p .. p'是世界坐标中的变换点。
对于上面的示例,您可以在本地坐标系中指定(2,2,0),(2,3,0)和(3,2,0)中的三角形。然后模型矩阵是微不足道的。否则你必须找出你如何计算旋转等。我建议阅读数学的前几章为3D游戏编程和计算机图形。这是一本非常简单的三维数学书,你应该得到处理大部分三维图形数学所需的最少信息。