OpenGL体素引擎速度慢

Sol*_*oid 6 c++ opengl voxel

我正在使用C++和OpenGL(àlaMinecraft)制作一个体素引擎,并且使用ATI X1600无法在我的3GHz上获得不错的fps ...我完全没有想法.

当我在屏幕上有大约12000个立方体时,它会降到20fps以下 - 可悲.

到目前为止,我的优化是:视锥体剔除,背面剔除(通过OpenGL的glEnable(GL_CULL_FACE)),引擎只绘制可见面(当然除了剔除面)并且它们在八叉树中.

我试过VBO,我不喜欢它们,它们不会显着增加fps.

Minecraft的引擎如何如此之快......我在10000立方体中挣扎,而Minecraft可以在更高的fps下轻松绘制.

有任何想法吗?

Mat*_*ard 6

@genpfault:我分析连通性,只为外部可见表面生成面.VBO有一个我glTranslate()d的立方体

我不是OpenGL的专家,但据我所知,这将节省很少的时间,因为你仍然需要将每个立方体发送到卡上.

相反,你应该做的是为所有外部可见表面生成面,将其放在VBO中,然后将其发送到卡片并继续渲染VBO直到几何体发生变化.这可以节省您的卡实际等待处理器向其发送几何信息的大部分时间.


Vil*_*nde 4

您应该分析您的代码以查明应用程序的瓶颈是在 CPU 还是 GPU 上。例如,您的剔除/八叉树算法可能很慢,在这种情况下,它根本不是 OpenGL 问题。

我还会计算您在每个帧上绘制的立方体数量并将其显示在屏幕上。只是为了让您知道您的剔除例程按预期工作。

最后你没有提到你的立方体是否有纹理。尝试使用较小的纹理或禁用纹理,看看帧速率增加了多少。

gDEBugger是一个很棒的工具,可以帮助您找到 OpenGL 的瓶颈。