0

我正计划编写一个将使用 VBO 进行渲染的 3D 游戏。例如,假设地形是一组瓦片,它们的顶点都在同一个 VBO 中。玩家应该能够滚动瓷砖,并且在任何时候都只能看到其中的一部分。

我想对这些瓷砖执行截锥剔除。我已经找到了一些关于截锥体剔除的数学部分的资料,但我不确定我将如何使用 VBO 来实现这一点——人们是在顶点着色器中以某种方式做到这一点,还是他们只是调用渲染函数来绘制VBO 的一个子集。

4

1 回答 1

1

鉴于您的相机就像在暗黑破坏神中一样(无论是等距还是透视):

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

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

关于绘制块:

对于大多数游戏来说,最简单的方法是让每个块都有自己的几何图形、VBO 等。但是您可以稍后进行优化,并且您的地形实现不应驱动您的引擎 API 设计(您将必须实现许多不同的方法来在引擎中绘制事物,例如粒子、后期处理效果等)。

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

但请记住,大多数游戏并不真正需要对地形进行太多优化。在您的道路上将会出现其他更值得优化的系统。

于 2013-12-31T10:46:54.880 回答