LibGDX 从模板编辑模型网格

LibGDX edit model mesh from a template

我正在做一个项目,我把它作为一个“基地”model/mesh,我把它塑造成一个更明确的地形。但是,当我尝试编辑网格时遇到问题。这基本上就是我的做法:(assets 是一个 AssetManager

Model terrain = assets.get("terrain.g3db", Model.class);
Mesh template = null;
for (float x = 0; x <= maxX; x += 1f) {
    for (float z = 0; z <= maxZ; z += 1f) {
        Mesh m = template.copy(false);

        // get proper vertices here

        mesh.setVertices(vertices);
        terrain.calculateTransforms();

        terrain.meshes.set(0, mesh);

        ModelInstance terrainInstance = new ModelInstance(terrain);
        terrainInstance.transform.setToTranslation(x, 0, z);
        instances.add(terrainInstance);
    }
}    

唯一的问题是,当我这样做时,我只能得到一个平坦的地形。当我删除此行时:

terrain.meshes.set(0, mesh);

我得到了地形,但每个模型实例都有相同的东西。要解决此问题,我必须删除该行,然后添加这一行:

terrain.meshes.get(0).setVertices(vertices);

我认为导致平面贴图的线发生的事情是当我设置它时,它删除了可能会说“嘿,这个网格与模型的这一部分相关”的任何内容。

截图:
使用导致平面图的线:
没有那条线:

更新: 感谢 Xoppa 的评论建议我为每个点加载一个新模型,但在这样做时,我必须使用 G3dModelLoader。如果可能的话,我想使用 AssetManager,但我不认为它是...

为了解决这个问题,我制作了一个使用 G3dModelLoader 的自定义加载器。为了确保我没有任何内存泄漏,我在 class 中创建了两个变量,即加载程序本身和一个初始化模型数组。您 运行 #getNewModel() 方法加载新模型,将其添加到初始化模型列表,然后 returns 新模型。在 #dispose() 方法中,它只是 运行 遍历初始化模型的列表,并且 运行 是这些模型的处置方法。