2010-08-22 9 views
3

에서 Vector3를 얻을 나는 매트릭스 수학은 충분히 이해 생각하지만 분명히 내가 여기XNA는 : 매트릭스

는 설정의 우둔 해요 : 나는 세계 [0,0,0]에서 개체가

공간. 마우스를 움직여 카메라 클래스를 제어하여 객체를 회전하고 확대/축소하여 항상 볼 수 있도록합니다. 여기에 내가 카메라에서 내 viewMatrix을 계산하는 방법은 다음과 같습니다

나는 상자의 거리를 얻을 수 있도록 세계 공간에서 카메라의 위치를 ​​얻을 수 있어야합니다
public Matrix viewMatrix { 
    get { 
     return 
      Matrix.CreateFromAxisAngle(Vector3.Up, rotAngle) 
       * Matrix.CreateFromAxisAngle(Vector3.Left, pitchAngle) 
       * Matrix.CreateTranslation(0, 0, distance) 
     ; 
    } 
} 

- 특히의 거리를 각면에서 상자의. 세계 우주 좌표계에서 카메라의 xyz 위치를 얻으려면 어떻게해야합니까?

이 나는 ​​시도했다 :

// all of these only return [0, 0, distance]; 
Vector3 pos = Vector3.Transform(Vector3.Zero, viewMatrix); 
Vector3 pos = viewMatrix.Translation; 
Vector3 pos = new Vector3(viewMatrix.M41, viewMatrix.M42, viewMatrix.M43); 

그것은 어떻게 든 손실되고있는 회전 정보처럼 보인다. 이상한 점은 viewMatrix 코드가 카메라 배치에 완벽하게 작동한다는 것입니다.

답변

7

또는 약간 단순화 :

Vector3의 POS = Matrix.Invert (뷰) .Translation;

2

는 다시 한번 질문을 게시하는 초 이내에 문제를 파악 :

내가보기 행렬을 반전 할 필요가 있었다. 회전 정보 은보기 행렬이 반전 될 때까지 거리 계산에 아무런 역할을하지 않기 때문에이 손실되었습니다. 회전은 변환의 잘못된 "끝"에있었습니다.

Vector3 pos = Vector3.Transform(Vector3.Zero, Matrix.Invert(viewMatrix));