Libgdx 用视口实例化阶段会弄乱游戏的外观

Libgdx 用视口实例化阶段会弄乱游戏的外观,libgdx,viewport,Libgdx,Viewport,我正在构建一个3D场景。直到现在,我还不需要任何视口。现在我正在添加scene2dui元素,我需要一个Viewport实例,因为Stage的构造函数接受Viewport实例,就像在newstage(Viewport)中一样 摄像机按以下方式实例化: camera=newPerspectiveCamera(45,Gdx.graphics.getWidth(),Gdx.graphics.getHeight()) 然而,一旦我设置了一个视口,我的场景就会变得一团糟。相机的位置变化很大,我的任何物体都不

我正在构建一个3D场景。直到现在,我还不需要任何视口。现在我正在添加scene2dui元素,我需要一个Viewport实例,因为Stage的构造函数接受Viewport实例,就像在
newstage(Viewport)中一样

摄像机按以下方式实例化:
camera=newPerspectiveCamera(45,Gdx.graphics.getWidth(),Gdx.graphics.getHeight())

然而,一旦我设置了一个视口,我的场景就会变得一团糟。相机的位置变化很大,我的任何物体都不可见。默认视口(在我添加自己的视口之前)非常完美,我的3D场景看起来非常整洁。我想保留这种行为。我希望我的场景看起来与添加视口之前完全一样。所以问题是。。。我必须实例化一个视口才能使它看起来像没有视口一样


编辑:此外,把事情搞砸的代码是
stage=newstage(viewport)在显示方法中。如果我删除它,如果我重新添加它,3D场景就可以了。所有对象都位于奇怪的位置。

要在视口之间切换,必须调用
viewport.apply()介于使用它们之间。如果不想使用特定视口,可以调用
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();

嗯,没有得到我想要的结果。同时,我切换到了ScreenViewport,现在摄影机回到原位,渲染场景,与之前没有包含视口时一样。我无法解释为什么它会起作用,但它会起作用。
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();