本主题与任何优化问题一样,受到很大冲击,但我无法找到我想要的东西。OpenGL低级性能问题
很多教程,甚至SO问题都有类似的提示;通常覆盖:
- 使用GL面剔除(OpenGL的函数,而不是现场逻辑)
- 仅发送1点矩阵到GPU(projectionModelView组合),因此每个模型减小MVP计算从每个顶点到一次(因为它应该是)。
- 使用交错顶点
- 尽量减少多达GL调用越好,一批酌情
,可能几个/许多其他问题。我(出于好奇的原因)使用几个顶点缓冲区在我的应用程序中渲染了2800万个三角形。我已经尝试了所有上述技术(据我所知),并且几乎没有收到性能改变。
虽然我在我的执行过程中接收到大约40FPS的数据,但这并不是问题,我仍然对这些优化的“提示”实际使用的位置感到好奇吗?
我的CPU在渲染过程中空转大约20-50%,因此我假设为我是用GPU来提高性能的。
注:我期待到gDEBugger此刻
跨张贴在Game Development
非常好!谢谢。 – 2011-03-09 10:36:25
非常好的答案。有一个问题,在你对第2点的回答中,我有点困惑。我比较了着色器内部具有“model * projection * view”的差异(因为统一变量,每次模型更改时发送模型视图);与每个模型更新的单个统一矩阵变量(模型视图投影)相比较,该模型由CPU而不是每个顶点计算(一次)。当然,这会节省很多计算? – dcousens 2011-03-09 11:25:45
@Daniel:你通常不会在着色器中计算MVP矩阵。你所做的是首先执行计算modelview_position = MV * vertex_position,然后clip_position = P * modelview_position。这背后的原因是,对于某些算法,您需要模型视图中转换的顶点位置,而不仅仅是整个投影过程的最终结果。此外,顶点法线仅由MV的逆转置来转换,而不是完整的MVP^T^-1,所以这是另一个原因:如果要实现光线良好,则需要这些转换后的法线。 – datenwolf 2011-03-09 11:33:00