2012-10-14 3 views
0

지정된 범위 내에서 카메라를 피치하는 데 문제가 있습니다. 현재 내 카메라는 아무런 제약없이 모델 주위에서 피치를 잡을 수 있습니다. 나는 Y 축을 6과 36의 범위로 제한하려고 시도했지만 피칭을 계속하면 Z 축은 카메라를 앞으로 계속 움직일 것입니다.두 값 사이의 카메라 피치 제한

저는 컨트롤러 썸 스틱을 사용하여 동작을 제어하고 있습니다. 궁극적으로, 내가하려는 일은 : "카메라의 타겟 (모델)에 대한 각도가 내 한계 값보다 큰 경우, 더 많은 피치 (지속적으로 썸휠을 위로 잡고있는 사람 또는 아래로) 적용됩니다. "

참고 :이 그것은 어떠한 공간에서 카메라의 X 또는 Y 위치와 아무 상관이없는 3 인칭 카메라

public void cameraPitch(float pitch) 
    { 
     cameraDirection = ModelLoad.CameraPos - ModelLoad.camTarget; 
     axisPitch = Vector3.Cross(Vector3.Up, cameraDirection); 

     // pitch constrained to model's orientation 
     axisPitch.Normalize(); 

     ModelLoad.CameraPos = Vector3.Transform(cameraDirection, 
      Matrix.CreateFromAxisAngle(axisPitch, pitch)) + ModelLoad.camTarget; 

     if (ModelLoad.camPos.Y > 36.0f) 
     { 
      ModelLoad.camPos.Y = 36.0f; 
     } 

     if (ModelLoad.camPos.Y < 6.0f) 
     { 
      ModelLoad.camPos.Y = 6.0f; 
     } 
    } 

답변

0

입니다. 이 문제를 해결하려면 카메라의 전체 피치를이 ModelLoad 개체 내에서 저장해야합니다. 그렇지 않으면 실제로 유지할 수있는 모든 위치에 저장해야합니다. 그런 다음 카메라의 위치 벡터에 행렬 변환을 적용하기 전에이 값을 확인하십시오. 실제로, 그 물건 중 하나를 수행하기 전에 확인하십시오. 예, 현재 피치가 36이면 아무것도하지 않고 메서드를 종료하십시오. 그렇지 않은 경우 카메라를 돌리고이 새 금액을 합계에 추가하는 것을 잊지 마십시오.

그리고 저는 기억이 안납니다. 그러나 Matrix.CreateFromAxisAngle에 전달하는 각도는 라디안이어야합니다. 따라서 36을 확인하지 말고, 라디안으로 변환 된 36을 확인하십시오. (당신이 그 하하를 모르는 척)

관련 문제