在尝试使用libgdx加载和渲染.obj模型时,我只得到黑屏。 我尝试过不同的模型(使用.obj格式的blender导出)我尝试加载.g3db文件而不是obj文件,并得出相同的结果。什么都没有呈现在屏幕上,但我的glClearColor(是的我尝试了除了黑色以外的其他东西,看看我的模型是否呈现纯黑色)我已经为.obj文件正确加载了所有资源(skeleton.mtl,skeleton.obj,texture。 png)而且我确定我的代码正在对它们做些什么,因为如果我删除say,texture.png,我会收到错误,说它无法找到资产。那么为什么我在渲染时会得到什么呢?我想了解为什么会这样。这是我的代码:
public void show() {
modelBatch = new ModelBatch();
environment = new Environment();
environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));
environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));
cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
cam.position.set(1f, 1f, 1f);
cam.lookAt(0,0,0);
cam.near = 0.1f;
cam.far = 300f;
cam.update();
ModelLoader loader = new ObjLoader();
model = loader.loadModel(Gdx.files.internal("models/skeleton.obj"));
instance = new ModelInstance(model);
camController = new CameraInputController(cam);
Gdx.input.setInputProcessor(camController);
ModelLoader loader = new ObjLoader();
model = loader.loadModel(Gdx.files.internal("models/skeleton.obj"));
instance = new ModelInstance(model);
camController = new CameraInputController(cam);
Gdx.input.setInputProcessor(camController);
然后我的渲染循环:
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
camController.update();
modelBatch.begin(cam);
modelBatch.render(instance, environment);
modelBatch.end();
}
答案 0 :(得分:1)
我忘了清除我的深度缓冲区。
在我的:
public void render(float delta) {
我改变了这个:
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
到这个
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
如果你使用的是GL10,它会是这样的:
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
我知道这是愚蠢的事。我还做了另一张海报建议的变化,关于确保我的透明度在搅拌机中设置在零以上,并且因为相机距离太近而无法渲染任何东西。谢谢。
答案 1 :(得分:0)
cam.position.set(1f, 1f, 1f);
cam.lookAt(0,0,0);
cam.near = 0.1f;
您的相机靠近原点,因此您的物体可能太大而相机可能在“内部”,所以它不会被渲染。
另外,您可能导出了不透明度为0的对象: https://github.com/libgdx/libgdx/wiki/Importing-Blender-models-in-LibGDX#wiki-troubleshooting-missing-textures
此外,Blender导出的材质很常见,不透明度设置为零。如果您注意到您的模型未被渲染。转到Blender中的Material,在“Transparency”下面将Alpha设置为所需的Alpha(通常为1,完全不透明)。