Camera.project
是要走的路。它完全符合您的要求……“找出屏幕上贴花投影的实际尺寸”。
我不确定 Libgdx 中的贴花使用什么坐标系
标准(右手)3D 坐标系。当您通过创建贴花时提供贴花的大小Decal.newDecal(width, height, ...)
。那是X
和Y
轴上的大小。
您需要执行以下操作:
通过使用贴花的位置、尺寸、旋转和比例计算贴花的 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]);