【问题标题】:Using perspective camera with OrthogonalTiledMapRenderer使用带有 OrthogonalTiledMapRenderer 的透视相机
【发布时间】:2018-02-18 12:39:44
【问题描述】:

我正在尝试让地图像这样渲染(底部图像):

我认为最好的方法是使用 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();

然而,这根本不会渲染地图。如果我删除设置投影矩阵的线,地图只会呈现如下:

我在这里看到了一个类似的问题,但这并没有解释解决方案,其中一个使用了不再存在的参数。我怎样才能达到预期的效果?

【问题讨论】:

  • 试试batch.setProjectionMatrix(camera.combined);而不是batch.setProjectionMatrix(camera.projection);
  • 确实解决了它!但它仍然只渲染 2 个图块,知道这是怎么回事吗?
  • 不好说,能不能给个截图?
  • 这是渲染地图的屏幕截图:i.imgur.com/4EpvGQJ.png,这是 Tiled 中的地图:imgur.com/a/QYWr4
  • 只是想知道你是否解决了这个问题?

标签: java libgdx tiled


【解决方案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 一起缩放。

  1. 透视相机不能用于渲染舞台 UI。

改为并行使用正交相机,或者更好的是使用在 Stage() 的构造函数中创建的默认 Ortho' 相机。

多个摄像机将渲染到同一个屏幕上;首先展示您的世界,然后过度渲染您的 HUD。

【讨论】:

    猜你喜欢
    • 2015-03-23
    • 2018-07-15
    • 1970-01-01
    • 2021-03-07
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2017-10-31
    相关资源
    最近更新 更多