【发布时间】:2011-09-05 17:37:42
【问题描述】:
我正在尝试几种绘制大量精灵的方法(例如,用于粒子系统),但我得到了一些不确定的结果。所以这就是我尝试过的和我拥有的: 完成绘制 25k 个精灵:
- 使用常规
glBegin/glEnd并使用三角函数计算顶点 - 17-18fps。 - 使用常规的
glBegin/glEnd,但使用glRotate、glTranslate和glScale转换精灵 - 14-15fps。 - 使用顶点数组代替
glBegin和glEnd,但仍使用三角函数来计算顶点位置 - 10-11fps。 - 使用顶点数组代替
glBegin和glEnd,但使用glRotate、glTranslate和glScale来变换精灵 - 10-11fps。
所以我的问题是,为什么使用顶点数组比使用 glBegin/glEnd 慢,而我已经读过(甚至在这里)它应该更快?
为什么使用自己的三角函数(在我的例子中是 5 cos、5 sin、超过 5 个除法、15 个乘法和大约 10 个加法/减法)比使用 5 个函数(glPushMatrix()、glTranslated() 、glRotated()、glScaled()、glPopMatrix())。我虽然它们是在 GPU 上完成的,所以它应该快得多。
在绘制较少的精灵时,我确实得到了更有希望的结果。就像我绘制 10k 个精灵时,顶点数组可以快 5fps 左右,但仍然不一致。另请注意,这些 fps 可以整体增加,因为我还有其他计算正在进行,所以我并不是真正关注 fps 本身,而是它们之间的差异。就像如果顶点数组和 gl 变换比手动触发的 glBegin/glEnd 多 5-10fps,那么我会很高兴,但现在看来,这似乎不值得麻烦。他们会帮助移植到 GLES(因为它没有 glBegin/glEnd),但我想我会为此做一个单独的实现。
那么有什么方法可以在不使用几何着色器的情况下加快速度?我不太了解它们(也许是一些很棒的教程?),它们可能会破坏与旧硬件的兼容性,所以我想在不使用着色器的情况下尽可能地榨取汁液。
【问题讨论】:
-
这似乎真的很低。 CPU/GPU 规格?
标签: c++ performance opengl transform