模型视图投影矩阵的目的


102

我们出于什么目的使用模型视图投影矩阵?为什么着色器需要“模型视图投影矩阵”?


12
只需查看以下链接即可:songho.ca/opengl/gl_transform.html
iKushal,2012年

3
我建议打开一个专用于计算机图形学的Stack Exchange网站,然后选择此问题作为示例问题。如果您有兴趣查看正在启动的网站,请关注computergraphics.stackexchange.com
2013年

Answers:


196

模型,视图和投影矩阵是三个单独的矩阵。模型从对象的局部坐标空间映射到世界空间,从世界空间到摄影机空间的视图,从摄影机到屏幕的投影。

如果将这三个组成部分,则可以使用一个结果来映射从对象空间到屏幕空间的所有路径,从而使您能够确定从输入顶点位置传递到可编程管线的下一级所需的内容。

在旧的固定功能管线中,您将应用模型并一起查看,然后使用从它们派生的另一个结果来计算光照(进行一些修复,这样即使您对对象应用了某些缩放比例,法线仍为单位长度。 ),然后应用投影。您会看到这反映在OpenGL中,后者从不分离模型和视图矩阵-将它们保持为单个模型视图矩阵堆栈。因此,有时您还会在着色器中看到这一点。

因此:着色器通常使用合成的模型视图投影矩阵将从为每个模型加载的顶点映射到屏幕。这不是必需的,有很多方法可以实现相同的目的,这很常见,因为它允许所有可能的线性变换。因此,组成较少的版本也是旧的固定管道世界中的规范。


3
所以对于几个对象(网格),我们需要几个modelView矩阵,不是吗?
尤里·维库洛夫

5
假设它们可以独立移动或分开放置,则可以。因此,这是最常见的处理方式-将modelView或projectionModelView作为统一传递给着色器程序,并已在CPU上为当前模型进行了设置。
Tommy

嗨,汤米,您是否可以使用此模型视图投影矩阵为Android Opengl Es2.0中的平移功能提供任何示例代码。我审阅更多的链接,我不能得到任何明确idea.if任何示例代码手段,它很容易理解我..
哈克里希纳恩

1
我有个问题。如果openGL使用MV矩阵作为一个矩阵,并且如果我们要从相机空间转到世界空间,则需要进行逆(投影矩阵*视图矩阵)*(光标位置),但是如果模型视图是一个组成矩阵。我们如何分离模型和视图矩阵,以便可以将视图矩阵用于该计算。所以我需要将它们分开吗?
EvrenBingøl2013年

@EvrenBingøl你知道了吗?我将模型和视图矩阵分开,但我想知道您对这个问题的实际答案,是否应该继续将其分开。
tom_mai78101 2016年

9

因为矩阵很方便。矩阵有助于转换相对于不同空间的位置/方向(一个空间可以由3个垂直轴和一个原点定义)。

这是@ legends2k在评论中指定的书的示例。

笛卡尔的居民使用其城市的地图,其原点非常合理地以城镇中心为中心,并且轴线沿罗盘的基本点指向。阅读障碍的居民使用其城市地图,其坐标以任意点为中心,轴沿任意方向运行,这在当时可能是个好主意。两个城市的居民都对各自的地图感到非常满意,但是国家交通工程师分配了一项任务,要为笛卡尔和诵读困难者之间的第一条高速公路增加预算,因此需要一张显示两个城市的详细信息的地图,因此引入了第三条坐标比他优越的系统,尽管不一定比其他任何人都要好。

这是另一个例子

假设您已经在游戏中使用世界坐标创建了汽车对象,并且其顶点位置也是如此。假设您必须在完全不同的世界中在其他游戏中使用同一辆汽车,则必须再次定义位置,计算将变得复杂。这是因为相对于新世界,您还必须计算汽车中的窗户,引擎盖,前灯,车轮等的位置。

观看视频以了解模型,视图和投影的概念。(强烈推荐)

然后查看此内容以了解世界上的顶点如何表示为矩阵以及如何对其进行变换。


如果深入思考,您将认识到,尽管变换是基于对象的原点(即单点),但对象的所有顶点(正式是网格/模型)都将经历变换,即所有1000个顶点都将相乘通过模型矩阵。因此,您的观点不正确。模型矩阵只是将模型空间中的顶点转换为世界空间的矩阵。这里没有性能优势,只是方便。
legends2k 2014年

如果是这样,为什么不只代表一个3D空间中的每个点呢?当您将一个场景的输出用于另一个场景(可能是另一个可移动场景的输入)时,应该会有好处:)
cegprakash 2014年

1
它们不能代表单个空间中的所有顶点,因为在相对空间中工作比在更大的空间(例如世界)中方便。假设有一个机器人,当被命令向前移动2米时,这样做的目的是要比定位世界的中心更适合自己的眼睛,然后再计算正确的合成坐标。
legends2k

我认为您是对的。无论如何,将为每个像素调用片段着色器,并且在复杂网格的情况下,我们将对每个像素执行矩阵乘法。:|
cegprakash 2014年

2
在片段着色器中,仅完成照明/着色计算,到数据到达片段着色器时,所有位置计算均已完成(即,在顶点着色器中)。这里有一个关于为什么使用多个坐标系的更好的解释。本书是出色的3D游戏数学资源。在同一章从本书的网站样本PDF
legends2k
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.