Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
三维图形/OpenGL中的模型矩阵_Opengl_3d_Transformation - Fatal编程技术网

三维图形/OpenGL中的模型矩阵

三维图形/OpenGL中的模型矩阵,opengl,3d,transformation,Opengl,3d,Transformation,我正在跟随一些教程学习openGL(如果有任何不同,请访问www.openGL-tutorial.org),有一个练习要求我在屏幕上绘制一个立方体和一个三角形,它提示我应该计算两个MVP矩阵,每个对象一个。MVP矩阵由投影*视图*模型给出,据我所知,投影矩阵和视图矩阵对于屏幕上的所有对象都是相同的(它们仅受我选择的“相机”位置和设置的影响)。但是,模型矩阵应该改变,因为它应该给我全局坐标中对象的坐标和旋转。根据教程,对于我的立方体,模型矩阵只是单位矩阵,因为它位于原点,没有旋转或缩放。然后我画三

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


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

模型矩阵与其他矩阵(投影、视图)类似,是一个具有相同布局的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图形数学所需的最少信息。

模型矩阵与其他矩阵(投影、视图)类似,是一个具有相同布局的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:不要认为我们应该引入更多不必要的复杂性;)我想我现在明白了。谢谢。是的,我也是这样理解模型矩阵的。然而,在上面的示例中,我仍然无法确定我的模型矩阵的元素应该是什么。您能帮忙吗?@dinony:虽然您描述的是仿射变换的常见情况,但没有理由模型矩阵不能在最后一行中包含(0,0,0,1)以外的内容。@derhass:不要认为我们应该引入更多不必要的复杂性;)我想我现在明白了。非常感谢。