gpt4 book ai didi

java - 体素游戏 : rendering blocks different ways and perfomance

转载 作者:行者123 更新时间:2023-12-02 05:00:57 25 4
gpt4 key购买 nike

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

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();
}
}
}

最佳答案

我建议对每个 block 和着色器使用 VBO,而不是显示列表和固定管道(实际上已弃用)。

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

VBO 提供更大灵 active 的一种方式是使用水和熔岩,这需要可以与缓冲分开调用纹理更新,从而减少重新缓冲整个 block 的需要。

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

关于java - 体素游戏 : rendering blocks different ways and perfomance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28286765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com