2014-06-17 4 views
1

저는 Libgdx 프로젝트를 진행하고 있습니다. 기본적으로 2.5D이므로, Decals과 DecalBatch를 사용합니다. 또한 조작 할 수있는 (확대/축소) PerspectiveCamera도 있으며, 데칼은 정적입니다.libgdx 스프라이트 크기를 픽셀 단위로 화면에 표시합니다.

화면에 데칼 투영의 실제 크기가 무엇인지 알아내는 데 문제가 있습니다 (예 : 카메라가 확대 될 때, 확대되고, 축소 될 때, 화면상의 데칼이 더 작아집니다.

그 크기를 알아야합니다.

나는 camera.project와 camera.unprojects를 시도했지만 양쪽 모두 동일한 값을 반환하고 데칼 위치에서만 작동하며 Libgdx의 데칼에는 어떤 좌표계가 사용되는지 잘 모르겠습니다.

제안 사항 해결 방법? 어떻게해야합니까?

답변

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]); 
+0

TNX을, 신속한 답변을 위해. 조금 더 자세하게 설명해 주실 수 있습니까? getVertices는 24 개 요소의 배열을 되 돌린다. 다소 혼란 스럽다. 어떤 것을 사용하여 camera.project 메서드의 Vector3를 만드는 데 사용할 수 있을까? 그 배열에 3 (x, y, z) 쌍이 있다는 것을 소스 코드에서 발견했습니다. // 3 (x, y, z) + 1 (color) + 2 (u, v) 이유 3? 4 아닌가요? – Veljko

+0

나는 며칠 전이 부분에서도 실패했다. 나는 그 값들을 어떻게 사용하는지 모른다. 나는 그것이 4이어야한다고 생각한다. 그러나 이러한 정점을 직접 계산할 수도 있습니다. 또는 렌더링 할 DecalBatch의 Source를 확인하고 정점 계산 방법을 확인하십시오. – noone

+0

그래, 코드를 확인 했어. 내 편집을 확인하십시오. – noone