LibGDX从模板编辑模型网格

Fis*_*shy 7 clone mesh libgdx

大家!我正在开发一个项目,我采用"基础"模型/网格,我将其形成为更加明确的地形.但是,当我尝试编辑网格时,我遇到了一个问题.这基本上就是我这样做的:( 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

terrain.meshes.set(0, mesh);
Run Code Online (Sandbox Code Playgroud)

我得到了地形,但每个模型实例都有相同的东西.要解决这个问题,我必须删除该行,并添加以下内容:

terrain.meshes.get(0).setVertices(vertices);
Run Code Online (Sandbox Code Playgroud)

我认为导致平面地图的线条正在发生的是当我设置它时,它会移除任何可能已经说过的东西,"嘿,这个网格与模型的这一部分有关".

屏幕截图:
与导致平面地图行:图片
没有该行:图片

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

Fis*_*shy 3

为了解决这个问题,我制作了一个使用G3dModelLoader. 为了确保没有任何内存泄漏,我在类中创建了两个变量,即加载器本身和初始化模型的数组。当您运行该#getNewModel()方法时,它会加载新模型,将其添加到初始化模型列表中,然后返回新模型。在该#dispose()方法中,它只是运行已初始化模型的列表,并对这些模型运行 dispose 方法。