2017-10-13 18 views
0

마우스로 카메라 컨트롤을 프로그래밍하고 있습니다. 사용자가 위아래로 또는 좌우로 볼 수 있지만 옆으로 기울일 수 없도록하고 싶습니다. 다른 말로하면, Yaw와 Pitch가 변경되지만 Roll은 0으로 제한하고 싶습니다.Quaternion을 사용하여 특정 축을 중심으로 회전을 방지합니다.

Quaternion이 특정 축을 중심으로 회전하는 것을 방지하려면 어떻게합니까? x 축 회전 또는 y 축 회전 만 허용하면 모든 것이 잘 작동하지만 어떤 이유로 든 두 가지를 동시에 허용하면 y 회전이 영향을 받고 카메라가 옆으로 기울어집니다.

+1

이것은 동일한 객체에 요와 피치를 추가하여 발생시키는 공통적 인 문제입니다. 나는 정확하게 그것을 고치는 방법을 기억하지 못한다. 그러나 당신은 부모로서 객체를 가질 필요가있다. 그리고 그 객체가 피치와 같이하고, 그 다음에 아이 객체 나 그 반대 객체에 요에 적용될 필요가있다. 나는 너무 확신하지 않는다. 두 개의 서로 다른 물체에서 요와 피치를 분리하면 효과가 있습니다. – CNuts

+0

두 개의 쿼터니온이 있고 그것을 구성 할 때, 결과 쿼턴 네이션을 취하고 축을 롤 축에 투영하여 롤 구성 요소를 제거 할 수 있어야합니다. 하지만 그것은 대수 선형 대수에 대한 직감에 근거한 비장의 답변입니다. – Omnifarious

답변

4

CNuts에 설명 된 것처럼 여러 개의 요 및 피치 회전을 연결하면 롤이 회전 할 수 있습니다. 그러나, 이것은 요 및 피치 회전이 승산 순서로 엄격하게 분리되면 발생하지 않는다. 예 :

Yaw1 * Yaw2 * Yaw3 * Pitch1 * Pitch2 

끝에 다른 요 회전이 추가 될 때만 문제가 발생합니다. 그러나 이것을 쉽게 막을 수 있습니다 : 요 회전을 추가하려면 왼쪽에 곱합니다. 피치 회전을 추가하려면 오른쪽에 피치 회전을 곱하십시오. 나는. 현재 카메라 회전 후, R 경우 모든 요잉 회전은 동일한 축을 중심이다

R = additionalYaw * R 

또는

R = R * additionalPitch 

때문에, 이러한 변환은 실제로 통근. 따라서 나타나는 순서는 중요하지 않습니다 (동일 축에 대한 다른 모든 회전에도 동일하게 적용됩니다). 물론 순서를 전환 할 수도 있습니다 (즉, 먼저 피치를, 그 다음 요를). 당신이 원하는 컨트롤의 종류에 따라.

CNuts도 대안적인 접근법을 설명했습니다. 변환 계층이있는 경우 카메라 변형을위한 두 개의 노드를 가질 수 있습니다. 그런 다음 요잉 회전을 그 중 하나에 추가하고 회전을 다른 것에 추가하십시오. 이것은 위에서 설명한 것과 동일한 효과를 가지며 효과적으로 다른 축에 대한 회전을 분리합니다.

+0

나는 쿼터니온 변환의 비가 변성을 생각했다. 우수 답변. – Omnifarious