【问题标题】:Why aren't Camera.unproject() and Camera.project() inverses of each other in libGdx?为什么在 libGdx 中 Camera.unproject() 和 Camera.project() 不互逆​​?
【发布时间】:2016-04-20 04:04:10
【问题描述】:

甚至在文档中写道Camera.unproject() 假定屏幕的原点位于左上角,另一方面Camera.project() 假定屏幕的原点位于左下角。这太烦人了。这是故意的吗?我没有得到什么吗?

        tmp3.x = selected.pos.x;
        tmp3.y = selected.pos.y;
        camera.unproject(tmp3);
        camera.project(tmp3);

这会翻转向量,它应该返回相同的向量。

编辑:
首先,我尝试使用Viewport.project()Viewport.unproject() 将点从一个视口转换到另一个视口(将上下文菜单定位在游戏元素上)。它们也继承了这种命名混乱,并且在那里的javadocs 中甚至没有提到。

PS。我真的很喜欢 libGdx。我刚刚写了这篇文章,也许是为了让将来的人免于头疼,因为我没有在网络上的任何地方直接指出这一点。

【问题讨论】:

    标签: libgdx


    【解决方案1】:

    项目方法的 Javadoc 解释了原因。我认为假设是投影一个点的最常见原因是将某些东西与 UI 对齐,这也将是 Y-up。但是当我投影时,最有可能将触摸坐标转换为世界坐标。

    或者以另一种方式看待它,您在 OpenGL 中所做的一切都是 Y-up,所以一切都被设计为 Y-up 或让您到达那里。

    不是说这一定是最好的方法;只是试图猜测思维过程。为您需要的另一种项目方法提交 PR 可能不会有什么坏处,或者您可以子类化您正在使用的任何类型的相机并添加其他方法。

    【讨论】:

    • 我猜你是对的。我真的很生气,因为我浪费了几个小时来跟踪一个错误,因为我认为我可以安全地假设这两种方法是成对的,这是我最后一次看到的地方。我只是觉得差异没有反映在命名中是一个糟糕的设计选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多