2011-05-02 5 views
1

다음 질문으로 도와 주실 수 있습니까?XNA 3D 카메라 및 게시판 카메라 회전 방향

  1. 어떻게 피벗으로 Vector3 주위에 카메라 위치 (Z 축에 대해) 회전 합니까?
  2. 어떻게 쿼드 객체가 카메라 앞에 위치와 쿼드 항상 같은 Vector3 피벗 주위에 카메라에 직면 해 있는지 확인하십시오 (Z 축에 대한) 회전 합니까?

을 설명하는 그림은 아래와 같습니다

Image showing the concept of a billboard

친절하게 답변 해주세요, 당신이

답변

0

그 vector3 점을 중심으로 카메라를 회전 이외에, 당신은 또한 같은 것을 사용할 수 있습니다 감사합니다 카메라가보고있는 대상. 그런 다음 카메라 위치를 변환하면됩니다. 카메라를 만드는 업 벡터는 항상 동일하게 유지됩니다. 당신은 Z 축을 언급하지만 XNA는 Y-up 시스템이므로 이미지에서 Y 축을 중심으로 회전을 수행합니다. 카메라 행렬에 액세스 할 수있는 경우는 다음을 수행 아마 간단하지만 XNA는이 Matrix.CreateBillboard (...)에 대한 도우미를 가지고

Vector3 pivotPoint = new Vector3(?, ?, ?); 
cameraPosition = Vector3.Transform(cameraPosition - pivotPoint, Matrix.CreateRotationY(anglePerFrame)) + pivotPoint; 
View = Matrix.CreatLookAt(cameraPosition, pivotPoint, Vector3.Up); 

Matrix billboardWorld = Matrix.Identity; 
billBoardWorld.Forward = Vector3.Normalize(cameraPosition - pivotPoint); 
billboardWorld.Right = Vector3.Normalize(Vector3.Cross(billboardWorld.Forward, Vector3.Up)); 
billboardWorld.Translation = cameraPosition - (billboardWorld.Backwards * distFromCamera); 
+0

큰 확인 그것은 카메라 회전을 고칠 수 있습니다. 하지만 여전히 직면하는 문제에 대해, 우선 제가 사용하고있는 것은 Vector3.Zero를 피벗으로 사용하고 두 번째로 distfromcamera는 무엇을 의미합니까? 각 쿼드 원점 벡터 3의 카메라까지의 거리 또는 무엇입니까? 나는 이것을 시도하고있다 : – user733916

+0

행렬 billboardWorld = Matrix.Identity; billboardWorld.Forward = Vector3.Normalize (camPosition - Vector3.Zero); billboardWorld.Right = Vector3.Normalize (Vector3.Cross (billboardWorld.Forward, Vector3.Up)); billboardWorld.Translation = camPosition - (billboardWorld.Backward * (Vector3.Distance (camPosition, quad.Origin)))); quad.World = billboardWorld; 쿼드가 회전합니다. 문제가 처음으로 쿼드가 존재하지 않습니다. 갑자기 카메라가 반 시계 방향으로 회전하면 쿼드가 오른쪽에서 왼쪽으로 이동하여 카메라가 사라집니다. – user733916

+0

'distanceFromCamera'는 빌보드가 카메라에서 오는 거리 (xna 단위)를 의미합니다. 빌보드가 카메라와 얼마나 멀리 떨어져 있는지를 나타냅니다. –

0

참고 :

 var billboardWorld = Matrix.Invert(camera.ViewMatrix); 
     billboardWorld.Translation = billboardPosition;