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