libgdx获取屏幕上精灵的大小(以像素为单位)

时间:2014-06-17 07:57:37

标签: libgdx perspectivecamera decal

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

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

我需要达到那么大。

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

有任何建议如何解决这个问题? 我该怎么办?

1 个答案:

答案 0 :(得分:3)

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

  

我不确定在Libgdx中用于Decals的坐标系

标准(右手)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]);