Java libGdx——尝试使用libGdx.g3d加载obj模型时出现黑屏

Java libGdx——尝试使用libGdx.g3d加载obj模型时出现黑屏,java,android,eclipse,opengl-es,libgdx,Java,Android,Eclipse,Opengl Es,Libgdx,在尝试使用libgdx加载和渲染.obj模型时,我只得到一个黑屏。 我尝试过不同的模型(使用blender以.obj格式导出),我尝试过加载.g3db文件而不是obj文件,得到了相同的结果。除了我的glClearColor(是的,我尝试了一些非黑色的东西来查看我的模型是否渲染为纯黑色)之外,屏幕上没有任何渲染。我已经正确加载了.obj文件(skeleton.mtl、skeleton.obj、texture.png)的所有资源,我确信我的代码正在对它们进行处理,因为如果我删除了,比如说,textu

在尝试使用libgdx加载和渲染.obj模型时,我只得到一个黑屏。 我尝试过不同的模型(使用blender以.obj格式导出),我尝试过加载.g3db文件而不是obj文件,得到了相同的结果。除了我的glClearColor(是的,我尝试了一些非黑色的东西来查看我的模型是否渲染为纯黑色)之外,屏幕上没有任何渲染。我已经正确加载了.obj文件(skeleton.mtl、skeleton.obj、texture.png)的所有资源,我确信我的代码正在对它们进行处理,因为如果我删除了,比如说,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();
}
你的相机离原点很近,所以你的物体可能太大,相机可能在里面,所以不会被渲染

此外,您可能导出了不透明度为零的对象:

此外,从Blender导出的材质的不透明度设置为零也是很常见的。如果注意到未渲染模型。转到“混合器”中的材质,并在“透明度”下方将其Alpha设置为所需的Alpha(通常为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);

我知道这是件愚蠢的事。我还做了另一张海报所建议的改变,确保我的透明度在blender中设置为零以上,并将相机后退,因为相机离得太近了,在那个距离也没有渲染任何东西。谢谢。

我检查了blender,材质不透明度设置为0,因此我将其设置为1以获得完全不透明度。导出.fbx,转换为.g3db,仍然是空的。我想到了凸轮。接近太近,但我有CameraInputController(凸轮);启用该选项,以便我可以使用鼠标滚轮滚动进出,使用鼠标左键单击四处平移,但我在屏幕上看到的绝对是我的gl.clearcolor。这太令人沮丧了,我做错了什么???!!Gdx.input.setInputProcessor(camController);即使纹理有问题,我还是会看到一个没有纹理的网格,或者你不这么认为吗?一定很简单,我快发疯了。我只想知道我做错了什么!我不敢相信,我也有同样的问题,你救了我一天。Gl状态机如此晦涩^^^这篇文章第二次救了我。每次我都怪模型导入/转换过程,就是这样。这一次,我用
shaperender
immediatemoderender20
很好地绘制了3D线条,这让我很反感。
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);