所以基本上我试图在2D中使用OrthographicCamera显示.obj 3D模型,而不是使用PerspectiveCamera显示3D。
当我使用PerspectiveCamera渲染时,一切正常,但如果我将其切换为正交,则不显示任何内容,只显示空白背景。
下面是我在使用PerspectiveCamera注释时使用的代码。我不确定是否需要设置OrthographicCamera的方式不同,或者我是否需要使用带有一些修改后的PerspectiveCamera来实现这一点。在这一点上,我“消除”哪个轴无关紧要。
基本上我想要实现的是能够将Blender用于我的2D动画。我在Blender方面已经想到这个并且它运行得很好,但它们必须作为.obj(或.fbx)导入到LibGDX中,它们作为模型加载到LibGDX中,因此必须使用ModelBatch进行渲染一个ModelInstance和一个Environment。我需要一种方法来使用2D正投影而不是3D透视投影来查看此对象。
有人对此有任何建议吗?
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();
}
}