libGDX 中的模型加载错误

Model loading error in libGDX

我从 archive3d 下载了一个 table 模型,使用 blender 将 .3ds 模型转换为 .fbx 并使用由 libGDX 提供的 fbx-converter.g3db格式模型。 我在 assets[=30= 中包含了所有 texturesmodel ]文件夹。

这是我的代码:

`@Override
    public void create() {
        camera = new PerspectiveCamera(75, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        camera.position.set(0f, 0f, 2f);
        camera.lookAt(0f, 0f, 0f);
        camera.near = 0.1f;
        camera.far = 300f;`

batch = new ModelBatch();

UBJsonReader jsonReader = new UBJsonReader();
G3dModelLoader modelLoader = new G3dModelLoader(jsonReader);
model = modelLoader.loadModel(Gdx.files.internal("table.g3db"));
modelInstance = new ModelInstance(model);

environment = new com.badlogic.gdx.graphics.g3d.Environment();
environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.8f, 0.8f, 0.8f, 1f));

@Override
    public void render() {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

        camera.update();

        batch.begin(camera);
        batch.render(modelInstance, environment);
        batch.end();
    }

我只有 黑屏,没有没有错误

首先将您的透明颜色更改为不同于黑色的颜色。因此,您可以验证您的模型是否未被渲染(例如,因为它不可见)或者您的模型是否有黑色 material(例如,缺少纹理或不正确的法线)。

Gdx.gl.glClearColor(0.5, 0.2, 0.6, 1);

接下来删除 environment 变量。如果没有灯光甚至无法渲染,则无需应用灯光。

如果问题仍然存在,请按照 this tutorial 进行操作。确保理解它,包括底部的 CameraInputController 部分。然后将 CameraInputController 添加到您的应用程序中,以便您可以四处移动相机、放大和缩小等。还可以固定相机的近平面和远平面。 0.1f 的近平面太接近零,这可能会导致问题,而是至少将其设置为 1f。你的远平面设置为 300f 单位,所以如果你的模型比那个大,你将看不到它(完全)。为了测试将它设置为 10000f 或其他东西(不要忘记之后减少它)。

在大多数情况下,问题是由模型太大或放错位置引起的。您也应该能够在 Blender 中看到并修复它。为了进行测试,您还可以在代码中缩小模型:

modelInstance.transform.scale(0.05f, 0.05f, 0.05f);

检查 this wiki page 以获取有关正确导出模型的更多提示。例如。您的纹理可能无法在 Blender 中正确应用,或者您的顶点缠绕可能不正确导致错误的面剔除。

如果所有这些都没有帮助,那么请验证您的代码是否适用于其他模型(例如 the ones used in the libgdx tests or in this tutorial). Then convert your model to a g3dj file 使用文本编辑器打开它并检查它是否存在问题。

检查当你使用时是否fbx-conv检查你是否有关于顶点太多的警告。检查您的模型使用的所有 material 文件和图像是否与 libgx 兼容。

顶点太多。我相信使用 signed short int 意味着 32k 限制。您提供的模型 link 非常大,因此如果您只是转换模型而不先优化它,它将太大。