我们出于什么目的使用模型视图投影矩阵?为什么着色器需要“模型视图投影矩阵”?
我们出于什么目的使用模型视图投影矩阵?为什么着色器需要“模型视图投影矩阵”?
Answers:
模型,视图和投影矩阵是三个单独的矩阵。模型从对象的局部坐标空间映射到世界空间,从世界空间到摄影机空间的视图,从摄影机到屏幕的投影。
如果将这三个组成部分,则可以使用一个结果来映射从对象空间到屏幕空间的所有路径,从而使您能够确定从输入顶点位置传递到可编程管线的下一级所需的内容。
在旧的固定功能管线中,您将应用模型并一起查看,然后使用从它们派生的另一个结果来计算光照(进行一些修复,这样即使您对对象应用了某些缩放比例,法线仍为单位长度。 ),然后应用投影。您会看到这反映在OpenGL中,后者从不分离模型和视图矩阵-将它们保持为单个模型视图矩阵堆栈。因此,有时您还会在着色器中看到这一点。
因此:着色器通常使用合成的模型视图投影矩阵将从为每个模型加载的顶点映射到屏幕。这不是必需的,有很多方法可以实现相同的目的,这很常见,因为它允许所有可能的线性变换。因此,组成较少的版本也是旧的固定管道世界中的规范。
因为矩阵很方便。矩阵有助于转换相对于不同空间的位置/方向(一个空间可以由3个垂直轴和一个原点定义)。
这是@ legends2k在评论中指定的书的示例。
笛卡尔的居民使用其城市的地图,其原点非常合理地以城镇中心为中心,并且轴线沿罗盘的基本点指向。阅读障碍的居民使用其城市地图,其坐标以任意点为中心,轴沿任意方向运行,这在当时可能是个好主意。两个城市的居民都对各自的地图感到非常满意,但是国家交通工程师分配了一项任务,要为笛卡尔和诵读困难者之间的第一条高速公路增加预算,因此需要一张显示两个城市的详细信息的地图,因此引入了第三条坐标比他优越的系统,尽管不一定比其他任何人都要好。
这是另一个例子
假设您已经在游戏中使用世界坐标创建了汽车对象,并且其顶点位置也是如此。假设您必须在完全不同的世界中在其他游戏中使用同一辆汽车,则必须再次定义位置,计算将变得复杂。这是因为相对于新世界,您还必须计算汽车中的窗户,引擎盖,前灯,车轮等的位置。
观看此视频以了解模型,视图和投影的概念。(强烈推荐)
然后查看此内容以了解世界上的顶点如何表示为矩阵以及如何对其进行变换。