Frustum剔除维也纳国际中心

时间:2013-12-31 10:08:57

标签: opengl vbo frustum culling

我打算编写一款将使用VBO进行渲染的3D游戏。比方说,例如,地形是一组瓦片,它们的顶点都在同一个VBO中。玩家应该能够滚动图块,并且在任何时候都只能看到它们的一部分。

我想在这些瓷砖上进行视锥体剔除。我已经在截锥体剔除的数学部分找到了一些来源,但我不确定如何用VBO实现这个 - 人们在顶点着色器中以某种方式做到这一点,或者他们只是调用渲染函数来绘制VBO的一个子集。

1 个答案:

答案 0 :(得分:1)

鉴于你的相机在暗黑破坏神(无论是等距还是透视)的行为都是如此:

如果您有一个固定的地图大小,您可以使用1个VBO作为地图的基本几何图形,假设您将使用基于高度图的解决方案。在顶点着色器之后,您的图形卡将丢弃不可见的四边形,不会影响像素填充率。他们不值得剔除你的一面。像Rocks,Houses等这样的细节无论如何都会有自己的VBO。

如果您的目标是拥有巨大无缝世界的流媒体内容引擎,那么创建块,块的大小取决于您的游戏。将你的地形划分成那些块,并在绘制之前测试相机平截头对着它们的边界框。

关于绘制块:

对于大多数游戏而言,最简单的方法是使每个块具有自己的几何体,VBO等等。但是您可以稍后优化 并且您的地形实现不应该驱动您的引擎API设计(您必须实现许多不同的方式来在引擎中绘制内容,例如粒子,后期处理效果等。 )。

您可以优化的一种方法是只使用一个VBO用于几何体和实例化绘图的使用,就像在粒子系统中一样,您可以为某些数据获取一些其他来源,例如全局变换,每个顶点的高度等等。

但请记住,大多数游戏并不需要在地形上进行那么多优化。你的道路上会有其他系统更值得优化。