首先,我对3D编程和libgdx非常陌生。 我看了几个教程,我已经渲染了我想要的场景。我有一些1x1x1块,用每个可见面的ModelBuilder.createRect()
创建,所以如果另一个块覆盖此块的面,则不会为此块创建矩形。也不需要顶部和底部矩形,因为我永远都看不到它们(除了地板)。所以我想,这非常有效。我也有Backface culling
启用,我做Viewfrustum culling
。但是,如果我朝着一个方向看,那么在我看来有很多街区的地方,FPS就会下降到15-20。这对我来说还是可以的,因为我的笔记本电脑已经超过5年了,它的性能并不是最好的,但是this answer让我觉得。使用Libgdx进行高效3D块渲染
“模型构建器仅用于调试”。好吧,但我应该如何创建我的盒子?为什么我应该在建模应用程序(如Blender)中创建Model
,对于简单的方块?通过这样做,我甚至无法剔除被其他区块占用的面孔。 所以我的问题是: 我如何创建和渲染那些盒子是最有效的方式?
IIRC,你的方法会导致每个矩形的一次绘制调用,如果你有很多矩形,它将变得非常昂贵。查看DecalBatch,了解您正在做的事情。它可以将所有矩形组合成一次绘制调用。 – Tenfour04
但是'ModelBatch'' flush()'只有当它的缓冲区已满时才会刷新它们,所以它只会被发送到GPU一次。同样''DecalBatch',尽我所知,没有做我所需要的,它在3D空间中绘制2D纹理,不是吗? – Springrbua
哦,是的,没错。你在使用混合吗?你绘制了多少个矩形? DecalBatch可以绘制没有纹理的实心矩形......您只需要一个自定义的GroupStrategy来设置它。这家伙(http://www.badlogicgames.com/forum/viewtopic.php?f=11&t=12493&p=55804&hilit=decalbatch#p55804)发现DecalBatch和ModelBuilder对矩形具有相似的性能。 – Tenfour04