绘制多个相同对象的最有效方法?

时间:2010-09-26 17:01:21

标签: iphone android graphics opengl-es webgl

我想用许多多维数据集制作游戏,并计划将其放在移动平台上,也可以使用webgl在网络上。我的问题是,当我为每个立方体进行一次电话会议时,我会对帧速率产生影响。有没有办法我可以对opengl进行单次绘制调用来绘制它们?立方体之间的唯一区别是位置和颜色。

3 个答案:

答案 0 :(得分:4)

我自己遇到了同样的问题。我问了类似的问题并且昨天自己回答了。看看:

Efficient way of drawing in OpenGL ES

您想创建顶点缓冲区并使用gl.bufferData将它们上传到图形卡内存一次。然后在每次执行gl.drawElements或gl.drawArrays时使用对该缓冲区的引用。在下次3D场景的内容发生变化之前,您可以使用上传到显卡内存中的此缓冲区。

答案 1 :(得分:0)

遵循UITableView的模型,了解它们如何使单元格出列。我会构建一个对象来跟踪你绘制的对象并将它们链接到一个Identifier。然后你可以简单地用所述标识符将它们出列。如果您知道要绘制同一对象的许多版本,请使用该对象最小化渲染/分配。

答案 2 :(得分:0)

如果你正在为glDrawElements()使用Vertex Arrays,我建议改为使用Vertex Buffer Objects。这将存储数据服务器端(在GRAM中)而不是客户端(在系统RAM中)。这样你就可以用更少的CPU< - > GPU数据传输开销来调用glDrawElements()调用。

或者,您可以将多维数据集存储在显示列表中。这样你就可以使用glTranlate()来移动一个立方体,然后只需调用显示列表来渲染它。使用显示列表的唯一警告是,无论你在显示列表中做什么都是不可变的;如果没有完全重新编译,就无法更改显示列表中的调用。