繁体   English   中英

openGL中带有对象的静态背景。 最佳“烘焙”方式?

[英]Static background w/ objects in openGL. Best way to “bake”?

我正在用openGL制作2D游戏,并且有一个静态对象列表。 到目前为止,我正在遍历它们并将它们吸引到房间中,但是在一些大房间中,它们最多可以容纳2000个,并且速度至关重要,因此我想找到一种方法将它们“烘焙”在一起并永远不会更新然后在绘制循环中。

我该怎么做?从性能,内存使用情况,gpu ram使用情况等方面来看,最好的方法是什么?

我更喜欢使用oGL 2,但我正在考虑使用oGL 3+。

最简单的方法是将这些对象的所有数据移至GPU,以便渲染命令将直接从GPU内存中获取内存。 只需使用VBO甚至DisplayList(在“旧” OpenGL 2.0及更低版本中)即可完成此操作。

DisplayList解决方案可能是最高效的,因为您可以“打包”内部的所有命令...使用VBO可以仅打包几何数据,需要在每一帧设置材质。 相关主题:固定(但您必须使用GL 3+)。

另一种方法是将它们渲染为纹理...并将其显示为简单的Sprits。 这项技术称为'impostors',这里是一些信息: True Impostors

另一个选择:将环境渲染到多维数据集贴图。 它可以用于距离相机较远的物体(例如山丘,尝试等),但在房间里看起来可能很奇怪。

第一种选择:为对象制作单个网格。 例如,您可以使用可见对象动态更新索引数组。 在这种情况下,非常重要的一点是,您使用的纹理应该位于地图集中 如果您不能共享着色器和纹理,则此技术不会产生太大影响。 您可以结合使用此方法,按材质对纹理进行分组,并使用单个draw调用进行渲染。 例如,首先进行绘图调用-用一种纹理渲染100棵树,然后在其上以及100云之后渲染600个苹果。

另一种选择是,如果您的对象是静态的,则可以使用FBO将所有对象渲染为纹理。 如果您的对象像背景,则可以应用此方法。 例如,您为星系渲染了空间中的随机恒星(1000)。

暂无
暂无

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

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