2014-06-17 66 views
1

我正在開發Libgdx項目。這基本上是2.5D的方法,所以我使用Decals和DecalBatch。 還有PerspectiveCamera,我可以操縱(放大/縮小),貼花是靜態的。libgdx獲取屏幕上像素的精靈大小

我有問題找出什麼是實際大小的貼花投影在屏幕上,例如。當相機放大時,它會變大,當縮小時,屏幕上的貼花apear會變小。

我需要這樣的大小。

我已經嘗試過camera.project和camera.unprojects,但它爲兩者返回相同的值,並且它僅適用於decal的位置,並且我不確定Libgdx中用於Decals的座標系是什麼。

任何建議如何解決這個問題? 我能做什麼?

回答

3

Camera.project是要走的路。它完全符合你的要求......「找出屏幕上貼花投影的實際大小。」

我不知道什麼座標系中Libgdx

標準(右手)三維座標系統中使用的貼花。當您通過Decal.newDecal(width, height, ...)創建貼花時,您可以提供貼花的尺寸。這是XY軸上的尺寸。

你需要做的是以下幾點:

,利用位置,尺寸,旋轉和規模計算貼花,這意味着「角」的四點的三維頂點貼花。有可能已經爲您返回這些值,但它是一個float[],並沒有記錄如何解釋這些值。

一旦你有了這4個頂點,你可以使用Camera.project(...)來獲得這一點的屏幕上的位置。如果您的貼花不總是直接面對相機,這些座標不一定會定義一個矩形,但這取決於您的用例以及您實際需要的信息。如果要檢測這些貼花(如點擊)輸入事件

,你應該建立一個BoundingBox爲您貼花(您可以使用您已經計算出的頂點),並創建一個RayCamera和輸入座標。然後使用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]); 
+0

TNX,快速回答。你能更詳細一點嗎? getVertices返回24個元素的數組,這有點令人困惑,哪些用於爲camera.project方法創建Vector3?我在源代碼中發現該數組中有3(x,y,z)對。 // 3(x,y,z)+ 1(顏色)+ 2(u,v) 爲什麼3?不是4? – Veljko

+0

幾天前我也在這部分失敗了。我不知道如何使用這些值。我認爲它也應該是4。但是,您也可以自己計算這些頂點。或者檢查DecalBatch的來源,它將渲染它們並檢查頂點在那裏的計算方式。 – noone

+0

好的,我現在也檢查了代碼。檢查我的編輯。 – noone