LibGDX从模板

时间:2017-03-05 21:31:18

标签: libgdx clone mesh

大家好!我正在开发一个项目,我采用“基础”模型/网格,我将其形成为更加明确的地形。但是,当我尝试编辑网格时,我遇到了一个问题。这基本上就是我这样做的:(assetsAssetManager

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

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

屏幕截图:
使用导致平面地图的行:Picture
没有那一行:Picture

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

1 个答案:

答案 0 :(得分:3)

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