1

我正在研究 Libgdx 项目。它基本上是 2.5D 方法,所以我使用 Decals 和 DecalBatch。还有 PerspectiveCamera,我可以操纵(放大/缩小),贴花是静态的。

我在找出屏幕上贴花投影的实际大小时遇到​​问题,例如。当相机放大时,它会更大,当缩小时,贴花在屏幕上会变小。

我需要得到那个尺寸。

我已经尝试过 camera.project 和 camera.unprojects,但它为两者返回相同的值,并且它仅适用于贴花的位置,而且我不确定 Libgdx 中的贴花使用什么坐标系。

任何建议如何解决这个问题?我能做些什么?

4

1 回答 1

3

Camera.project是要走的路。它完全符合您的要求……“找出屏幕上贴花投影的实际尺寸”。

我不确定 Libgdx 中的贴花使用什么坐标系

标准(右手)3D 坐标系。当您通过创建贴花时提供贴花的大小Decal.newDecal(width, height, ...)。那是XY轴上的大小。

您需要执行以下操作:

通过使用贴花的位置、尺寸、旋转和比例计算贴花的 3D 顶点,即四边形的“角”点。Decal.getVertices()可能已经为您返回了这些值,但它是一个并且float[]没有记录如何解释这些值。

一旦你有了这 4 个顶点,你就可以使用它Camera.project(...)来获取屏幕上这一点的位置。如果您的贴花并不总是直接面向相机,则这些坐标不一定会定义一个矩形,但这取决于您的用例以及您实际希望使用此信息实现的目标。

如果您想检测这些贴花上的输入事件(如点击),您可能应该BoundingBox为您的贴花创建一个(您可能使用您已经计算过的顶点)并Ray使用您的Camera和输入坐标创建一个。然后用于Intersector.intersectRayBoundsFast(Ray, BoundingBox)检查您的点击是否点击了此贴花。

编辑:你可以得到这样的顶点:

float[] vertices = decal.getVertices();
Vector3 topLeft = new Vector3(vertices[Decal.X1], vertices[Decal.Y1], vertices[Decal.Z1]);
Vector3 topRight = new Vector3(vertices[Decal.X2], vertices[Decal.Y2], vertices[Decal.Z3]);
Vector3 bottomLeft = new Vector3(vertices[Decal.X3], vertices[Decal.Y3], vertices[Decal.Z3]);
Vector3 bottomRight = new Vector3(vertices[Decal.X4], vertices[Decal.Y4], vertices[Decal.Z4]);
于 2014-06-17T08:27:19.260 回答