Java 在LibGDX中使用正交摄影机显示三维模型

Java 在LibGDX中使用正交摄影机显示三维模型,java,camera,libgdx,Java,Camera,Libgdx,所以基本上我想用一个正交的2D摄像机来显示一个.obj 3D模型,而不是用透视摄像机来显示3D模型 当我用透视图渲染时,一切都很好,但是如果我把它转换成正字法,什么都不会显示,只是空白背景。 下面是我用来注释透视照相机的代码。我不确定是否有不同的方法来设置正交摄影机,或者是否需要使用透视摄影机和一些修改视图来实现这一点。在这一点上,我“消除”哪个轴并不重要 基本上,我想要实现的是能够使用Blender制作2D动画。我已经在Blender端解决了这个问题,它工作得非常好,但是它们必须作为.obj(

所以基本上我想用一个正交的2D摄像机来显示一个.obj 3D模型,而不是用透视摄像机来显示3D模型

当我用透视图渲染时,一切都很好,但是如果我把它转换成正字法,什么都不会显示,只是空白背景。

下面是我用来注释透视照相机的代码。我不确定是否有不同的方法来设置正交摄影机,或者是否需要使用透视摄影机和一些修改视图来实现这一点。在这一点上,我“消除”哪个轴并不重要

基本上,我想要实现的是能够使用Blender制作2D动画。我已经在Blender端解决了这个问题,它工作得非常好,但是它们必须作为.obj(或.fbx)导入LibGDX,作为模型加载到LibGDX中,因此必须使用ModelInstance和环境使用ModelBatch进行渲染。我需要一种方法来查看这个对象使用二维正交投影,而不是三维透视投影

有人对此有什么建议吗

public class Test extends ApplicationAdapter {

//public PerspectiveCamera cam;
public OrthographicCamera cam;
public CameraInputController camController;

public ModelBatch modelBatch;

public ModelInstance ship;

public Environment environment;

@Override
public void create() {
    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(10f, 10f, 10f);
    cam.lookAt(0, 0, 0);
    cam.near = 1f;
    cam.far = 10f;
    cam.update();
    */

    cam = new OrthographicCamera();
    cam.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    cam.update();

    camController = new CameraInputController(cam);
    Gdx.input.setInputProcessor(camController);

    ObjLoader loader = new ObjLoader();
    Model model = loader.loadModel(Gdx.files.internal("data/invader.obj"));
    ship = new ModelInstance(model);
}

@Override
public void render() {
    camController.update();

    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

    modelBatch.begin(cam);
    modelBatch.render(ship, environment);
    modelBatch.end();
}

@Override
public void dispose() {
    modelBatch.dispose();
}
}

您是否尝试过使用较小的视口大小?我不知道您在模型中使用的单位,但您可以尝试
cam.setToOrtho(16,9)
。否则你可能需要放大很多。也许你也应该翻译一下你的相机,因为像这样相机和模型都应该位于(0,0,0)。@Darren我面临同样的问题。你解决问题了吗?@LunaVulpo对不起,没有,我从来没有解决过我的问题。最后,我决定使用我的动画,它们有一个功能非常全面的LibGDX库(Spine的开发人员也是LibGDX的开发人员)。我也遇到过类似的情况——我认为正交相机要么在模型的内部,要么在模型的前面。所以摆弄模型的Z位置可能会有所帮助。对这个问题有什么想法吗?我面临同样的问题:(