我正在构建一个3D场景。到目前为止,我并不需要任何视口。现在我正在添加Scene2D UI元素,我需要一个Viewport实例,因为Stage的构造函数接受视窗实例,如new Stage(viewport);
以下列方式实例化摄像机:
camera=new PerspectiveCamera(45, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
viewport=new ExtendViewport(Gdx.graphics.getWidth(),Gdx.graphics.getHeight(),camera);
然而,一旦我设置了一个视口,我的场景就变得完全搞砸了。相机会改变位置很多,我的物体都不可见。默认视口(在我添加自己之前)是完美的,我的3D场景看起来非常整洁。我想保留这种行为。我希望我的场景看起来与添加视口之前完全一样。所以问题是......我必须实例化一个视口以使其表现得好像没有任何东西?
编辑:此外,在show方法中,混乱的代码是stage = new Stage(viewport);
。如果我删除它,3D场景很好,如果我把它添加回来..所有对象都处于奇怪的位置。
答案 0 :(得分:0)
要在视口之间切换,您必须在使用它们之间调用viewport.apply();
,如here所述。如果您不想使用特定视口,可以调用Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
将其重置为整个屏幕。所以,在你的渲染方法中:
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
modelbatch.begin(camera);
// render using modelbatch
modelbatch.end();
stage.getViewport().apply();
stage.draw();