9

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

4

3 回答 3

4

我自己也遇到了同样的问题。我问了类似的问题,昨天我自己回答了。看一眼:

OpenGL ES中的高效绘图方式

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

于 2010-10-14T02:01:09.960 回答
0

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

于 2010-09-27T15:25:25.563 回答
0

如果您在 glDrawElements() 中使用顶点数组,我建议您改用顶点缓冲区对象。这将存储数据服务器端(在 GRAM 中)而不是客户端(在系统 RAM 中)。这样,您可以使用更少的 CPU<->GPU 数据传输开销进行 glDrawElements() 调用。

或者,您可以将您的立方体存储在显示列表中。这样你就可以使用 glTranlate() 来移动一个立方体,然后调用显示列表来渲染它。使用显示列表的唯一警告是,您在显示列表中所做的任何事情都是不可变的。如果不完全重新编译,您将无法更改显示列表中的调用。

于 2010-09-27T20:58:29.243 回答