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