3

从今天早上开始,我一直在从事一个小型 Web 项目(您可以在此处找到它):使用 Babylon JS 构建一个小型体素引擎(具有类似 Minecraft 的纹理)。

我做了一个小世界(大小 50 * 50),没有其他方块(只是要走的第一层)。我用Java做了一个类似的项目,我该如何优化我的项目?因为它落后了。

使用Java,我必须:
- 禁用立方体内面的显示(我知道“backFaceCulling = true;”但它只适用于每个面没有一张图像但所有面都有一张图像的块)。
- 当一个块就在它旁边时禁用面的显示。
- 使用 VBO。
- 制作一个大物体草(由我所有的草块组成,而不是制作多个草方块)。

你知道我该怎么做这4点吗?(以及其他优化方式)?
PS:我所有的代码都在这个main里,你不想我写在这里吗?

################################### 编辑 ############## ###########################


好的,要制作一个立方体,我的 img/block/ 文件夹 plg 文件或其他文件夹中有。全部由 id (0, 1, 2 ...) 命名 如果 i 是一个文件夹,它包含 6 个 jpg 文件(每个面一个块)。所以这是执行此操作的代码:

function readAllCube(scene, tab, nb){
    for(var cpt=0; cpt<=nb; cpt++){
        tab.push(new BABYLON.StandardMaterial("cube"+cpt, scene));
        tab[cpt].backFaceCulling = true;
        switch(cpt){
            case 2:
                tab[cpt].reflectionTexture = new BABYLON.CubeTexture("img/block/"+cpt+"/"+cpt, scene);
                tab[cpt].reflectionTexture.coordinatesMode = BABYLON.Texture.SKYBOX_MODE;
                break;
            default:
                tab[cpt].diffuseTexture = new BABYLON.Texture("img/block/"+cpt+".png", scene);
                break;
        }
    }
}

所以我会有一个纹理标签。但是当我的纹理由多个图像组成时,我不知道如何禁用绘图(内面)。

我也找不到如何从我的所有立方体中制作自定义网格。我认为渲染 1 个自定义网格比 625 个块更快,对吧?

如果我这样做,也许我认为我将能够删除被其他块隐藏的面孔。

4

0 回答 0