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]);
TNX을, 신속한 답변을 위해. 조금 더 자세하게 설명해 주실 수 있습니까? getVertices는 24 개 요소의 배열을 되 돌린다. 다소 혼란 스럽다. 어떤 것을 사용하여 camera.project 메서드의 Vector3를 만드는 데 사용할 수 있을까? 그 배열에 3 (x, y, z) 쌍이 있다는 것을 소스 코드에서 발견했습니다. // 3 (x, y, z) + 1 (color) + 2 (u, v) 이유 3? 4 아닌가요? – Veljko
나는 며칠 전이 부분에서도 실패했다. 나는 그 값들을 어떻게 사용하는지 모른다. 나는 그것이 4이어야한다고 생각한다. 그러나 이러한 정점을 직접 계산할 수도 있습니다. 또는 렌더링 할 DecalBatch의 Source를 확인하고 정점 계산 방법을 확인하십시오. – noone
그래, 코드를 확인 했어. 내 편집을 확인하십시오. – noone