【问题标题】:Model matrix in 3D graphics / OpenGL3D 图形/OpenGL 中的模型矩阵
【发布时间】:2013-05-06 14:42:48
【问题描述】:

我正在学习一些教程来学习 openGL(如果有什么不同,请访问 www.opengl-tutorial.org),并且有一个练习要求我在屏幕上绘制一个立方体和一个三角形,它显示为暗示我应该计算两个 MVP 矩阵,每个对象一个。 MVP 矩阵由 Projection*View*Model 给出,据我所知,屏幕上的所有对象的投影和视图矩阵都是相同的(它们仅受我选择的“相机”位置和设置的影响)。但是,模型矩阵应该改变,因为它应该给我对象在全局坐标中的坐标和旋转。按照教程,对于我的立方体,模型矩阵只是单位矩阵,因为它位于原点并且没有旋转或缩放。然后我绘制我的三角形,使其顶点位于 (2,2,0)、(2,3,0) 和 (3,2,0)。现在我的问题是,我的三角形的模型矩阵是什么?

我自己的推理是,如果我不想旋转或缩放它,模型矩阵应该只是平移矩阵。但是这里的翻译坐标是什么?它应该包括顶点之一或三角形中心的位置还是什么?还是我完全误解了模型矩阵是什么?

【问题讨论】:

    标签: opengl 3d transformation


    【解决方案1】:

    模型矩阵就像其他矩阵(投影、视图)一样,是具有相同布局的 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 游戏编程和计算机图形学的前几章数学。这是一本非常简单的 3d 数学书,您应该从中获得处理大部分 3d 图形数学所需的最少信息。

    【讨论】:

    • 是的,这也是我理解模型矩阵的方式。但是,在上面的示例中,我仍然无法弄清楚我的模型矩阵的元素应该是什么。你能帮忙吗?
    • @dinony:尽管您描述的是仿射变换的常见情况,但模型矩阵没有理由不能在最后一个 (0,0,0,1)行。
    • @derhass:不要认为我们应该引入更多不必要的复杂性;)
    • 我想我现在明白了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 2015-05-18
    相关资源
    最近更新 更多