我应该单独存储转换矩阵吗?

时间:2012-04-21 03:38:28

标签: android opengl-es transform opengl-es-2.0

我是OpenGL ES 2.0的新手,我正在尝试一些二维渲染。

假设每个对象都会被翻译,旋转,倾斜和缩放,并且可以在鼠标单击时选择,我现在有两个选择:

  • 为每个变换存储一个矩阵,并将它们分别传递给顶点着色器。矩阵乘法将在GPU上完成,我想这会更快。当只改变一个变换矩阵时,它也很方便。确定选择有点重,因为我需要将每个矩阵应用于向量。

  • 只存储一个矩阵作为所有变换矩阵的乘积,并将其传递给顶点着色器。这可能很好,因为Matrix.scaleM()Matrix.translateM()等某些方法速度很快,不需要乘法。这也是因为我们每帧上传到着色器的统一数据都会减少。但每次改变其中一个转换矩阵时,应重新计算整个产品。确定选择相对简单,因为我只需要将一个矩阵应用于向量。

    欢迎任何有关选择的建议。

  • 1 个答案:

    答案 0 :(得分:2)

    如果执行基准测试会更好,因为性能与多个问题相关:

  • CPU和GPU的乘法性能之间的差距。
  • 上传制服的带宽。
  • 应用转换的顶点数。
  • 仅将一个转换矩阵标记为脏的可能性。
  • 更改转换参数的频率。

    通常可以在本地执行此操作,因为在仅涉及2D对象时,可以轻松优化矩阵乘法。