当前位置: 首页 > 知识库问答 >
问题:

用VBOs实现截锥剔除

莫英喆
2023-03-14

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

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

共有1个答案

方博
2023-03-14

鉴于你的相机的行为就像在暗黑破坏神(无论等距或透视):

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

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

关于绘制块:

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

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

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

 类似资料:
  • 问题内容: 我正在使用libgdx开发一个小游戏。这是一款二维自上而下的游戏,上面有一些大地图,上面有很多物体。所以我只想在我的视锥中渲染事物。我看过了。但是我正在使用scene2d,并且在中设置了相机,将s的投影矩阵设置为,而我的s用覆盖方法绘制了它们自己。我如何访问那里的视锥台?有没有办法让它脱离精灵?还是有另一种方法来实现平截头截锥体的淘汰? 问题答案: 您无需自己执行此操作。如果您将舞台与

  • 尝试在脑子中想象一个3D立方体,数数你从任意方向最多能同时看到几个面。如果你的想象力不是过于丰富了,你应该能得出最大的面数是3。你可以从任意位置和任意方向看向这个球体,但你永远不能看到3个以上的面。所以我们为什么要浪费时间绘制我们不能看见的那3个面呢?如果我们能够以某种方式丢弃这几个看不见的面,我们能省下超过50%的片段着色器执行数! Important 我说的是超过50%而不是50%,因为从特定

  • 本文向大家介绍Struts拦截器实现拦截未登陆用户实例解析,包括了Struts拦截器实现拦截未登陆用户实例解析的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是Struts拦截器实现拦截未登陆用户,具体实现如下。 首先建立一个工具类: checkPrivilegeInterceptor:这个类继承interceptor,这是一个接口,要实现三个方法,要是觉得比较多的话,可以继承他的实现类A

  • Frustums 用于确定相机视野内的东西。 它有助于加速渲染过程——位于摄像机视锥体外的物体可以安全地排除在渲染之外。 该类主要用于渲染器内部计算 camera 或 shadowCamera的视锥体。 构造器(Constructor) Frustum(p0 : Plane, p1 : Plane, p2 : Plane, p3 : Plane, p4 : Plane, p5 : Plane) p

  • 本文向大家介绍VBS实现截图功能,包括了VBS实现截图功能的使用技巧和注意事项,需要的朋友参考一下 百度说,VBS很难截图,倒是有个利用第三方软件的方法,调用该软件,然后该软件会自动截图。 但这样,违背了用VBS的初衷。 用VBS就是因为它方便快捷。要是用第三方软件的话,干脆我们直接用VB写一个好了。 那么...只好调用Excel用VBA去做了。 有什么更好的方法吗? 在度娘上翻了很久,没有什么好

  • 本文向大家介绍python定时截屏实现,包括了python定时截屏实现的使用技巧和注意事项,需要的朋友参考一下 写在前面 因为暂时还没有想好做什么具体的某个项目来提升对python的理解,所以就自己想着做一下小玩意来加强一下自己对一些库和方法的理解 分析 1、截屏 截屏的话有pillow这个模块,并且就两条语句,后面会看到 2、定时任务 定时的话涉及到时间,所以会引入time这个模块 3、保存 保