Java 体素游戏:渲染块的不同方式和性能

Java 体素游戏:渲染块的不同方式和性能,java,opengl,lwjgl,voxel,Java,Opengl,Lwjgl,Voxel,我正在使用OpenGL制作一个类似Minecraft的游戏,我想知道,在不损失性能的情况下,实现灵活渲染的最佳解决方案是什么。我的意思是,有不同类型的块体,有不同的绘制方式:通常的块体只是带有纹理的简单立方体,楼梯更复杂,像水和熔岩这样的液体块体需要纹理更新。我有一个显示列表块。每个块都有自己的类型字节值。根据这个值,我可以找到完整的块表示,它对于相同类型的所有块都是通用的,并且包含名称、绘制方法和其他信息。现在我需要删除渲染不可见面,如果块的左边有一个邻居,我们不需要绘制它的左边。但这意味着我

我正在使用OpenGL制作一个类似Minecraft的游戏,我想知道,在不损失性能的情况下,实现灵活渲染的最佳解决方案是什么。我的意思是,有不同类型的块体,有不同的绘制方式:通常的块体只是带有纹理的简单立方体,楼梯更复杂,像水和熔岩这样的液体块体需要纹理更新。我有一个显示列表块。每个块都有自己的类型字节值。根据这个值,我可以找到完整的块表示,它对于相同类型的所有块都是通用的,并且包含名称、绘制方法和其他信息。现在我需要删除渲染不可见面,如果块的左边有一个邻居,我们不需要绘制它的左边。但这意味着我需要向绘图方法、数组或掩码传递6个参数。这是画画的好方法,还是我选择了一个愚蠢的解决方案?对于以自己的方式绘制不同类型的块,您可以推荐什么

for(int x = 0; x < 16; x++){
        for(int y = 0; y < 128; y++){
            for(int z = 0; z < 16; z++){    
                GL11.glPushMatrix();
                    GL11.glTranslatef(x, y, z);
                    BlockTypes.getBlockType(blocks[x][y][z].type).draw();                   
                GL11.glPopMatrix();
            }
        }
    }       

我建议对每个块和着色器使用VBO,而不是实际不推荐使用的显示列表和固定管道

使用VBO具有多种优势。它允许您使用着色器,比固定管道提供了更大的灵活性。使用着色器,可以将纹理数据、颜色数据等与顶点/索引数据分开发送。此外,VBO通常速度更快

VBO提供更大灵活性的一种方法是使用水和熔岩,这需要纹理更新可以与缓冲分开调用,从而减少拒绝整个块的需要


至于隐形人脸检测,我相信这是唯一的方法。不要传递6个参数,只需将块传递给方法即可。您还可以创建一个方法来检索正在检查的块周围的块。

请不要使用建议,而是根据事实来回答