模型视图投影matrix的目的

为什么我们使用模型视图投影matrix? 为什么着色器需要模型视图投影matrix?

模型,视图和投影matrix是三个独立的matrix。 模型从对象的本地坐标空间映射到世界空间,从世界空间到相机空间的视图,从相机到屏幕的投影。

如果将所有这三个元素组合在一起,就可以使用这一个结果来映射从对象空间到屏幕空间的所有path,从而能够从input的顶点位置计算出需要传递到可编程stream水线的下一个阶段的内容。

在旧的固定functionstream水线中,您可以将模型和视图一起应用,然后使用从它们派生的另一个结果来计算光照(使用一些修正,以便例如法线仍然是单位长度,即使您已经对对象应用了一些缩放),然后应用投影。 你可以看到,反映在OpenGL中,它从不分离模型和视图matrix – 保持它们作为一个单一的模型视图matrix堆栈。 因此,您有时也会看到在着色器中反映的情况。

所以:组合的模型视图投影matrix经常被着色器用来从你为每个模型加载的顶点映射到屏幕。 这不是必需的,有很多方法可以达到同样的效果,只是因为它允许所有可能的线性变换。 因此,在固定pipe道世界中,它的一个较小的组成版本也是常态。

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

以下是@ legends2k在评论中指定的一本书的示例。

笛卡儿的居民使用他们的城市地图,其原点以城市中心为中心,沿着指南针的基点指向轴线。 诵读困难的居民使用他们的城市地图,坐标以任意点为中心,坐标轴以某些任意方向运行,这在当时可能是个好主意。 这两个城市的居民对各自的地图都很满意,但是国家交通工程师分配了一个在笛卡尔和诵读困难之间的第一条公路的预算的任务需要一个地图显示两个城市的细节,因此引入了第三个坐标系统比他优越,但不一定对任何其他人。

这是另一个例子,

假设你已经使用世界坐标在一个游戏中创build了一个汽车物体,其顶点位置。 假设你必须在一个完全不同的世界中使用同一辆车在其他游戏中,你必须再次定义位置,计算将变得复杂。 这是因为你再次需要计算汽车中窗户,引擎盖,车灯,车轮等在新世界的位置。

看这个video来了解模型,视图和投影的概念。 (强烈推荐)

然后看到这个来理解世界中的顶点如何表示为matrix,以及它们是如何变换的。