【问题标题】:The purpose of Model View Projection Matrix模型视图投影矩阵的用途
【发布时间】:2011-04-05 10:49:04
【问题描述】:

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

【问题讨论】:

标签: opengl directx 3d


【解决方案1】:

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

如果您将这三个都组合起来,您可以使用一个结果来映射从对象空间到屏幕空间的所有路径,这样您就可以计算出需要从传入的可编程管道传递到下一阶段的内容顶点位置。

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

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

【讨论】:

  • 所以对于几个对象(网格)我们需要几个模型视图矩阵,不是吗?
  • 假设它们可以独立移动或单独定位,那么是的。所以这是最常见的方法——将 modelView 或 projectionModelView 作为统一传递给着色器程序,并为 CPU 上的当前模型设置它。
  • 嗨,Tommy,如果可能的话,您能否使用此模型视图投影矩阵为 Android 中 Opengl Es2.0 中的平移功能提供任何示例代码。我参考了更多链接,我无法得到任何明确的想法。如果任何示例代码意味着,它对我来说很容易理解..
  • 我有一个问题。如果 openGL 使用 MV 矩阵作为一个矩阵,并且如果我们从相机空间转到世界空间,我们将需要逆(投影矩阵*视图矩阵)*(光标位置),但如果模型视图是一个组合矩阵。我们如何分离模型和视图矩阵,以便我可以使用视图矩阵进行计算。所以我需要把它们分开?
  • @EvrenBingøl 你得到答案了吗?我将模型和视图矩阵分开,但我想知道您的问题的实际答案是否应该继续分开。
【解决方案2】:

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

这是一个来自 cmets 中 @legends2k 指定的书中的示例。

笛卡尔的居民使用他们城市的地图和原点 相当明智地集中在城镇中心,轴线沿着 指南针的基点。 Dyslexia 的居民使用 他们城市的地图,坐标以任意点为中心 和轴在一些可能看起来的任意方向上运行 当时是个好主意。两个城市的市民都很开心 与他们各自的地图,但国家运输工程师 分配了一项任务,为第一条高速公路制定预算 Cartesia 和 Dyslexia 需要一张显示两个城市详细信息的地图, 因此引入了第三个坐标系 对他来说,但不一定对其他任何人。

这是另一个例子,

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

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

然后查看this,了解世界中的顶点如何表示为矩阵以及它们是如何转换的。

【讨论】:

  • 如果你仔细想想,你会发现,虽然变换是基于对象的原点(即单点),但对象的所有顶点(正式的网格/模型)都会经过转换,即所有 1000 个顶点将乘以模型矩阵。因此,您的观点不是很好。模型矩阵只是将模型空间中的顶点转换到世界空间的矩阵。这里没有性能优势,只是方便。
  • 如果是这样,为什么它们不代表单个 3D 空间中的每个点?当您使用场景的输出到另一个场景时应该有好处,这可能是另一个可移动场景的输入:)
  • 它们并不代表单个空间中的所有顶点,因为在相对空间中工作比在更大的空间(如世界)中工作更方便。假设一个机器人,当被命令向前移动 2 米时,用它的眼睛做这件事比定位世界中心,然后计算正确的结果坐标更合适。
  • 我认为你是对的。无论如何,每个像素都会调用片段着色器,并且在复杂网格的情况下,我们将对每个像素执行矩阵乘法。 :|
  • 在片段着色器中仅完成光照/着色计算,当数据到达片段着色器时,所有位置计算都已完成(即在顶点着色器中); a better explanation on why use multiple coordinate systems is here。这本书是一本优秀的 3D 游戏数学资源。 same chapter as a sample PDF from the book's website.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 2015-08-06
相关资源
最近更新 更多