Opengl ES 2.0:模型矩阵与每个顶点的计算

rdnobrega

我可能会问一个愚蠢的问题,但我对opengl es 2.0性能有些好奇。

假设我有一个图形对象,其中包含一个顶点数组“ VA”,一个缓冲区数组“ BA”和/或一个模型矩阵“ MM”,并且我想每帧至少执行一次平移和一次旋转。那么,最好的选择是什么?

  1. 在VA上执行操作(旋转和转换),然后传递给BA。
  2. 直接在BA上执行操作(Ror和Trans)。
  3. 在MM上执行操作,并将其传递给Opengl Vertex Shader。

我的视锥细胞是关于性能,即处理/内存比率。我认为第三个选项可能是因为GPU最好,但是在内存方面也是最昂贵的,因为每个对象都必须有一个MM,对吗?

我认为的另一个解决方案是将平移和旋转参数传递给着色器,然后在着色器上组装MM。

如何做到最好?

Matic Oblak

这不是一个愚蠢的问题,但是不幸的是,这完全取决于情况。通常,如果顶点数据不断变化,即使在GPU上使用顶点缓冲区也不是最好的主意,但我想事实并非如此。

因此,您所考虑的两个主要差异是:

  1. 修改CPU中的每个顶点,然后将顶点数据发送到GPU。
  2. 将数据直接保留在GPU上,并使用矩阵在顶点着色器中对其进行更改。

因此,如果顶点数据的变化超出了矩阵或任何其他类型的分析表示的顶点转换可以呈现的范围,则第一个选择实际上是好的。例如,如果您一直在CPU上生成随机位置。在这种情况下,即使使用顶点缓冲区也几乎没有意义,因为无论如何,您都需要保持流传输顶点数据。

第二种方法在基本顶点数据相对静态(在每个帧上变化不大)的情况下非常有用。您将顶点数据一次(或不时一次)推入GPU,然后使用顶点着色器为您转换顶点数据。GPU上的顶点着色器这样做非常有效,并且比在CPU上应用相同的算法要快得多。

关于您的问题:如果您有大量的顶点数据,第三个选项很可能是最好的,但我不会说这在内存方面很昂贵,因为矩阵由16个浮点数组成,自6 3d起应该比较小顶点位置会占用更多的内存,因此您完全不必担心。如果有任何问题,您应该担心要流向GPU的数据量,而使用此选项再次最少。

将平移和旋转传递给顶点着色器,而不是为每个顶点组成矩阵,可能不是最好的主意。此处发生的是,您向GPU发送4 + 3浮点数(而不是16浮点数)的流量有所增加,但首先要分两步发送,这会产生开销。除此之外,您消耗的内存要多得多,然后要减少,因为无论如何您都需要在着色器中创建矩阵。如果这样做,您将为每个顶点着色器计算一个新矩阵,这意味着每个顶点。

现在关于这些矩阵和内存,很难说它将对内存本身产生任何影响。堆栈大小通常是固定的,或者至少是四舍五入的,因此,是否将矩阵添加到着色器中,很可能根本不会在任何内存消耗上产生任何差异。

关于openGL和性能,您首先需要注意:

  • 内存消耗。这主要是用纹理拍摄的,1024x1024 RGBA将占用约4MB的空间,相当于一百万个浮点数或包含3D位置向量的约35万个顶点,因此像矩阵这样的东西实际上影响不大。
  • 数据流。这是在每一帧上需要传递给GPU的数据量。应该尽可能减少这种情况,但是再次发送最多几个MB根本不是问题。
  • 着色器的整体效率
  • 抽奖电话数。如果可能,请尝试打包尽可能多的相似数据,以减少绘图调用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

OpenGL ES2 Alpha测试问题

来自分类Dev

OpenGL ES顶点/索引

来自分类Dev

恒定顶点属性与OpenGL ES 2中的均匀性的含义是什么

来自分类Dev

Android OpenGL ES 2-混合似乎总是可加的

来自分类Dev

如何在OpenGL ES 2中正确缩放

来自分类Dev

OpenGL ES 2.0 2D(Marmalade SDK)

来自分类Dev

OpenGL ES 2:将标量顶点属性传递给着色器程序

来自分类Dev

OpenGL ES 2.0 Texture2D索引

来自分类Dev

Android上的OpenGL ES 2:如何使用VBO

来自分类Dev

Kevin Brothaler OpenGL ES 2教程代码是否错误?

来自分类Dev

OpenGL ES 2D矩阵设置

来自分类Dev

关于OpenGL ES 2的问题

来自分类Dev

Android openGL ES2rotateMM翻转角度

来自分类Dev

OpenGL ES2:在顶点着色器(iOS)中使用“ layout”关键字时语法错误

来自分类Dev

无法使RGB纹理显示在OpenGL ES2中

来自分类Dev

Android Opengl ES2,颜色代替纹理中的位图

来自分类Dev

旋转了Android OpenGL ES 2纹理象限

来自分类Dev

多个OpenGL ES 2 Android渲染器

来自分类Dev

在opengl es 2中如何释放纹理(ios硬崩溃)

来自分类Dev

在OpenGL ES 2中,恒定顶点属性与统一属性的含义是什么?

来自分类Dev

Android OpenGL ES 2-混合似乎总是可加的

来自分类Dev

OpenGL ES 2.0 2D(Marmalade SDK)

来自分类Dev

从顶点计算2D形状的纹理坐标?iOS OpenGL ES

来自分类Dev

OpenGL es 2中的顶点。适用于Android的Java

来自分类Dev

如何在OpenGL ES 2中使用顶点数组对象

来自分类Dev

Opengl Es更新动画中每个顶点的法线

来自分类Dev

Android OpenGL ES2。0VBO无法渲染

来自分类Dev

OpenGL ES 2.0 矢量转换无法通过矩阵乘法(在顶点着色器中)工作

来自分类Dev

模型矩阵变换 OpenGL ES 2.0

Related 相关文章

热门标签

归档