繁体   English   中英

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

[英]Most efficient way to draw multiple identical objects?

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

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

在OpenGL ES中绘制的有效方法

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM