opengl单色和多色性能问题

时间:2014-03-13 13:28:33

标签: opengl

我正在使用glBindBuffer绘制一个包含600万个元素(四边形和三边形)的巨大模型。如果我为所有组件(组件,是一组元素)提供单色,则与具有不同颜色的组件相比,旋转的模型更快。我可以知道这个的原因。我可以改善我的表现吗。

2 个答案:

答案 0 :(得分:0)

感谢您的回复。

我可以编写伪代码

for(i=0; i < iSize ; ++i )
{
 glColorfv(componet[i].rgba);
 glDrawElements(GL_QUADS,......);// THis is working fine.
}

但我发现(感觉)的是,如果componet [i] .rgba对于所有i值都相同,那么与所有组件都具有不同颜色的情况相比,模型旋转(处理/缩放等)更快。 / p>

也许我可能会发布这样的帖子。对不起。

答案 1 :(得分:0)

计算机图形学中有一个术语“批处理”。简而言之,批处理是状态+绘制;如果发生多次绘制但状态未发生变化,则此绘制包含在同一批次中。但是,更改状态会中断批处理并准备新的状态。这是CPU密集型任务;你应该使用尽可能少的批次,否则你将达到CPU限制。

每帧600万批次的数量不是很少。如果您的对象很小(几个元素 - 有时甚至是几百个元素),您可以将它们全部合并到一个顶点数组中,并添加包含颜色的额外顶点属性(如果使用固定管道 - 使用glColorPointer)。

如果对象很大并且颜色开销太大 - 你可以使用实例化,但它需要足够现代的图形卡(但是渲染6百万个对象会很慢而不需要下降的GPU)。