gpt4 book ai didi

java - 需要一些帮助来使用 Frustum Culling 实现 VBO

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:59 24 4
gpt4 key购买 nike

我目前正在为一个学校项目开发我的第一个 3D 游戏,游戏世界完全受到我的世界的启发(世界完全由立方体组成)。我目前正在寻求提高尝试实现顶点缓冲区对象的性能,但我被卡住了,我已经实现了这些方法:Frustum culling, only drawing exposed faces and distance culling 但我有以下疑问:

  1. 目前我的世界中有大约 2^24 个立方体,分成 1024 个 16*16*64 立方体 block ,现在我正在做即时模式渲染,如果我实现的话,它与截锥体剔除配合得很好每个 block 一个 VBO,我每次移动相机时都必须更新那个 VBO(以更新截锥体)吗?这会影响性能吗?

  2. 我可以动态更改每个 VBO 的大小吗?还是我必须让每一个都尽可能大(完全充满对象的 block )?

  3. 我是否必须将每个访问过的 block 保存在内存中,或者我是否可以有效地删除该 VBO 并在需要时重新创建它。

最佳答案

  1. 每次更改相机视锥体时都更改 VBO 可能不是一个好主意。连续缓冲数据所带来的开销可能会超过绘制更少的多边形所带来的任何性能提升。当它们完全移出平截头体时,您最好剔除整个 IBO。您最终会绘制出比绝对必要的更多的多边形,但从 VBO 绘制比在即时模式下绘制快得多这一事实足以抵消这一点。
  2. 您可以更改 VBO 的大小,但只能通过对 glBufferData 进行新调用,如果您要将数据发送到图形卡,这可能是一个昂贵的调用。
  3. 您最好不要将您为其创建的 VBO 的所有 block 都保存在内存中,那样很快就会失控。将周围环境牢记在心,并在离开时丢弃它们是最好的选择。

关于java - 需要一些帮助来使用 Frustum Culling 实现 VBO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8315908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com