模型视图投影矩阵的目的

Yur*_*lov 98 opengl directx 3d

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

Tom*_*mmy 190

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

如果组合所有这三个,您可以使用一个结果从对象空间到屏幕空间的所有方式进行映射,使您能够根据传入的顶点位置计算出需要传递到可编程管道的下一个阶段的内容.

在旧的固定功能管道中,您将模型和视图一起应用,然后使用从它们派生的另一个结果计算出光照(使用一些修复,以便即使您对对象应用了一些缩放,例如法线仍然是单位长度),然后应用投影.您可以看到OpenGL中反映的内容,它永远不会分离模型和视图矩阵 - 将它们保持为单个模型视图矩阵堆栈.因此,您有时也会看到着色器中反映的内容.

因此:着色器模型视图投影矩阵通常由着色器用于从您为每个模型加载的顶点到屏幕的映射.这不是必需的,有很多方法可以实现相同的功能,它只是通常的,因为它允许所有可能的线性变换.正因为如此,它的一个较小的组合版本也是固定管道世界的标准.

  • 我希望你是我的计算机图形学教授.:) (17认同)
  • 假设他们可以独立移动或单独定位,那么是的.因此,这是最常用的方法 - 将modelView或projectionModelView作为一个统一体传递给着色器程序,为CPU上的当前模型设置它. (5认同)
  • 所以对于几个对象(网格)我们需要几个modelView矩阵,不是吗? (3认同)
  • 非常感谢,现在很多事情对我来说都很清楚 (2认同)

ceg*_*ash 7

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

以下是@ legends2k在评论中指定的书中的示例.

Cartesia的居民使用他们城市的地图,其原点非常明确地集中在城镇中心,并沿着指南针的基点指向.阅读障碍的居民使用他们城市的地图,坐标以任意点为中心,并且轴在任意方向上运行,这在当时可能是个好主意.这两个城市的市民对他们各自的地图非常满意,但国家运输工程师分配了为Cartesia和Dyslexia之间的第一条高速公路预算的任务,需要一张显示两个城市细节的地图,因此引入了第三个坐标系统优于他,但不一定与其他人相比.

这是另一个例子,

假设您使用世界坐标在游戏中创建了一个具有顶点位置的汽车对象.假设你必须在完全不同的世界中的其他游戏中使用同一辆汽车,你必须再次定义位置并且计算将变得复杂.这是因为你必须再次计算车内窗户,发动机罩,车灯,车轮等的位置.

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

然后看看这个,以了解世界中的顶点如何表示为矩阵以及它们如何被转换.

  • 在片段着色器中,仅进行照明/着色计算,到数据到达片段着色器时,所有位置计算都完成(即在顶点着色器中); [更好地解释为什么使用多个坐标系统在这里](http://books.google.com/books?id=X3hmuhBoFF0C&pg=PA80&lpg=PA80&dq=why+bother+with+multiple+coordinate+spaces).这本书是一个优秀的3D游戏数学资源.[与本书网站上的PDF格式相同章节](http://gamemath.com/3d_math_primer_2e_chapter3_multiple_coordinate_spaces.pdf). (2认同)