Camera.project
是要走的路。它完全符合你的要求......「找出屏幕上貼花投影的實際大小。」
我不知道什麼座標系中Libgdx
標準(右手)三維座標系統中使用的貼花。當您通過Decal.newDecal(width, height, ...)
創建貼花時,您可以提供貼花的尺寸。這是X
和Y
軸上的尺寸。
你需要做的是以下幾點:
,利用位置,尺寸,旋轉和規模計算貼花,這意味着「角」的四點的三維頂點貼花。有可能已經爲您返回這些值,但它是一個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]);
TNX,快速回答。你能更詳細一點嗎? getVertices返回24個元素的數組,這有點令人困惑,哪些用於爲camera.project方法創建Vector3?我在源代碼中發現該數組中有3(x,y,z)對。 // 3(x,y,z)+ 1(顏色)+ 2(u,v) 爲什麼3?不是4? – Veljko
幾天前我也在這部分失敗了。我不知道如何使用這些值。我認爲它也應該是4。但是,您也可以自己計算這些頂點。或者檢查DecalBatch的來源,它將渲染它們並檢查頂點在那裏的計算方式。 – noone
好的,我現在也檢查了代碼。檢查我的編輯。 – noone