我认为最好的方法是使用PerspectiveCamera,所以我设置了这样的相机和渲染器:
// in show
camera = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
camera.position.set(0, 150, 100);
camera.lookAt(0, 0, 0);
camera.far = 1000;
camera.update();
batch = new SpriteBatch();
tiledMap = new TmxMapLoader().load("map.tmx");
tiledMapRenderer = new OrthogonalTiledMapRenderer(tiledMap, batch);
// in render (after glClear)
camera.update();
batch.setProjectionMatrix(camera.projection);
tiledMapRenderer.render();
然而,这根本不会渲染地图。如果我删除设置投影矩阵的线,则地图仅渲染如下:
我在这里看到了类似的问题,但这并没有解释解决方案,人们使用了一个不再存在的参数。我怎样才能达到预期的效果?
答案 0 :(得分:1)
我知道我迟到了,但这是 100% 可能的。
我在调试器内部单步执行了 gdx,发现渲染器只渲染了几个图块,因为它无法正确计算剔除视锥体,因为它对相机一无所知。
通常,您会使用 r.setView()
将视口传递给供稿渲染器,但这只接受正交相机。
相反,您必须使用姊妹方法手动指定视口区域(位置和大小),并进行调整:
r.setView(cam.combined, cam.position.x - cam.viewportWidth * 0.5f , cam.position.y, cam.viewportWidth, cam.viewportHeight)
1)fieldOfView
是 Orthographic 缩放最接近的替代品,
但是需要注意的是,视野和渲染器的视口应该紧密匹配。
如果您的渲染器的剔除区域大于相机的查看区域,则渲染超出可见区域会浪费时间。
我建议考虑将上述内容与 FOV 一起缩放。
改为并行使用正交相机,或者更好的是在 Stage()
的构造函数中创建的默认正交相机。
多个摄像头将渲染到同一个屏幕上;先展示你的世界,然后过度渲染你的 HUD。