Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
opengl单色和多色性能问题_Opengl - Fatal编程技术网

opengl单色和多色性能问题

opengl单色和多色性能问题,opengl,Opengl,我正在使用glBindBuffer绘制一个包含600万个元素(四元和三元)的巨大模型。如果我为所有组件(组件,是一组元素)提供单一颜色,则与具有不同颜色的组件相比,模型旋转更快。我可以知道原因吗。我可以从我这边改进性能吗。谢谢您的回复 我会写伪代码 for(i=0; i < iSize ; ++i ) { glColorfv(componet[i].rgba); glDrawElements(GL_QUADS,......);// THis is working fine. } fo

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

谢谢您的回复

我会写伪代码

for(i=0; i < iSize ; ++i )
{
 glColorfv(componet[i].rgba);
 glDrawElements(GL_QUADS,......);// THis is working fine.
}
for(i=0;i
但我发现(感觉)如果componet[I].rgba对于所有I值都相同,那么与所有组件都具有不同颜色的情况相比,模型旋转(处理/缩放等)更快


也许我会这样发布。很抱歉。

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

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


如果对象很大,而且颜色开销太大,您可以使用实例化,但它需要足够现代的图形卡(但如果没有下降GPU,渲染600万个对象的速度会很慢)。

添加代码示例
glBindBuffer
不是绘图命令,您不能使用它绘图。您可以(也应该)编辑问题以添加信息,而不是放置一个实际上没有回答问题的答案。