다음 질문으로 도와 주실 수 있습니까?XNA 3D 카메라 및 게시판 카메라 회전 방향
- 어떻게 피벗으로 Vector3 주위에 카메라 위치 (Z 축에 대해) 회전 합니까?
- 어떻게 쿼드 객체가 카메라 앞에 위치와 쿼드 항상 같은 Vector3 피벗 주위에 카메라에 직면 해 있는지 확인하십시오 (Z 축에 대한) 회전 합니까?
을 설명하는 그림은 아래와 같습니다
이친절하게 답변 해주세요, 당신이
다음 질문으로 도와 주실 수 있습니까?XNA 3D 카메라 및 게시판 카메라 회전 방향
을 설명하는 그림은 아래와 같습니다
이친절하게 답변 해주세요, 당신이
그 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);
참고 :
var billboardWorld = Matrix.Invert(camera.ViewMatrix);
billboardWorld.Translation = billboardPosition;
큰 확인 그것은 카메라 회전을 고칠 수 있습니다. 하지만 여전히 직면하는 문제에 대해, 우선 제가 사용하고있는 것은 Vector3.Zero를 피벗으로 사용하고 두 번째로 distfromcamera는 무엇을 의미합니까? 각 쿼드 원점 벡터 3의 카메라까지의 거리 또는 무엇입니까? 나는 이것을 시도하고있다 : – user733916
행렬 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
'distanceFromCamera'는 빌보드가 카메라에서 오는 거리 (xna 단위)를 의미합니다. 빌보드가 카메라와 얼마나 멀리 떨어져 있는지를 나타냅니다. –