libGDX 中的模型加载错误
Model loading error in libGDX
我从 archive3d 下载了一个 table 模型,使用 blender 将 .3ds 模型转换为 .fbx 并使用由 libGDX 提供的 fbx-converter 到 .g3db格式模型。
我在 assets[=30= 中包含了所有 textures 和 model ]文件夹。
这是我的代码:
`@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 非常大,因此如果您只是转换模型而不先优化它,它将太大。
我从 archive3d 下载了一个 table 模型,使用 blender 将 .3ds 模型转换为 .fbx 并使用由 libGDX 提供的 fbx-converter 到 .g3db格式模型。 我在 assets[=30= 中包含了所有 textures 和 model ]文件夹。
这是我的代码:
`@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 非常大,因此如果您只是转换模型而不先优化它,它将太大。