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