【发布时间】:2015-02-02 21:07:17
【问题描述】:
我正在使用 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();
}
}
}
【问题讨论】: