java – 需要一些帮助用Frustum Culling实现VBO

我正在为学校项目开发我的第一个3D游戏,游戏世界完全受到我的世界(完全由立方体制成的世界)的启发.我正在寻求提高尝试实现顶点缓冲对象的性能,但是我已经卡住了,我已经实现了这些方法:Frustum剔除,只绘制暴露面和距离剔除但我有以下疑问:

>我目前在我的世界中有大约2 ^ 24个立方体,分为1024个16 * 16 * 64立方体块,现在我正在进行立即模式渲染,如果我每个块实现一个VBO,这对于截锥体剔除很有效,每次移动相机时我是否必须更新VBO(更新视锥体)?这会有性能影响吗?
>我可以动态更改每个VBO的大小吗?或者我是否必须使每个可能的大小(完全充满对象的块)?
>我是否必须将每个访问过的块保留在内存中,或者我是否可以有效地删除该VBO并在需要时重新创建它.

最佳答案 >每次更换相机截止后改变VBO都不是一个好主意.连续缓冲数据的开销可能会超过绘制较少多边形所带来的性能提升.当他们完全移出截头体时,你可能会更好地剔除整个VBO.你最终会得到比绝对必要的更多的多边形,但是这将比通过VBO绘制比立即模式绘制快得多的事实更加平衡.

>您可以更改VBO的大小,但只能通过对glBufferData进行新的调用,如果您将数据发送到图形卡,这可能是一个昂贵的调用.

>你最好不要保留你在内存中创建VBO的所有块,这很快就会失控.将您周围的环境保存在记忆中,并在您离开时丢弃它们是您最好的选择.

点赞