为什么是modelview矩阵?

时间:2014-04-25 10:30:01

标签: opengl glsl glsles

我很抱歉,如果这是一个愚蠢的问题,但我很长一段时间想知道为什么有很多示例顶点着色器,包含一个模型视图矩阵。在我的计划中,我有以下情况:

  • 投影矩阵几乎没有变化(例如在应用程序窗口调整大小时)并且它是分开的,这很好,
  • 模型矩阵经常变化(例如,模型上的变换),
  • 视图矩阵也经常变化(例如,改变观看方向,四处移动......)。

如果我在顶点着色器中使用模型视图矩阵,我必须在CPU上执行矩阵乘法并上传单个矩阵。另一种方法是上传模型和视图矩阵并在GPU上进行乘法运算。关键是,视图矩阵不一定与模型矩阵同时发生变化,但如果使用模型视图矩阵,则只要其中任何一个发生变化,就必须执行CPU乘法和上传。那么为什么不使用单独的视图和模型矩阵来实现快速GPU乘法,并且可能大致相同数量的GPU矩阵上传?

2 个答案:

答案 0 :(得分:5)

因为在顶点着色器中使矩阵相乘会使GPU对进入它的每个顶点进行完全计算(请注意,最近的GLSL编译器会检测到所有顶点上的产品是均匀的,并且可能会移除计算GPU到CPU)。

此外,当执行 4×4矩阵计算时,CPU实际上优于GPU,因为没有数据传输和命令队列开销。

GPU计算的一般规则是:如果它在所有顶点上均匀,并且您可以在CPU上轻松预先计算它,那么就在CPU上进行。

答案 1 :(得分:2)

因为您只需要为每个模型计算一次MV矩阵。如果您将两个单独上传到GPU,它将对每个顶点进行计算。

现在可能是因为如果你受CPU限制,那么它仍然是性能增益,因为即使你正在添加(可能)1000次额外的矩阵乘法,你也要将它们从CPU中推出,但我还是考虑优化而不是标准技术。