오일 회전 각 및 쿼터니온을 사용하여 3D 회전을 제한하는 올바른 방법은 무엇입니까?3D 회전을 제한하는 방법 (오일러)
내 방식에 문제가있는 것처럼 보입니다. 회전을 골격 구조의 뼈대에 애니메이션으로 적용하고 뼈가 시각적으로 잘못된 방향으로 "점프"하고 개별 오일러 구성 요소가 범위의 반대쪽 끝으로 감싸고 있습니다.
저는 오일러 각을 사용하여 현재 방향을 나타내고 쿼터니언으로 변환하여 각 오일러 각도 축을 독립적으로 클램핑합니다.
Euler min = ...;
Euler max = ...;
Quat rotation = ...;
Euler eCurrent = ...;
// do rotation
Quat qCurrent = eCurrent.toQuat();
qCurrent = qCurrent * rotation;
eCurrent = qCurrent.toEuler();
// constrain
for (unsigned int i = 0; i < 3; i++)
eCurrent[i] = clamp(eCurrent[i], min[i], max[i]);
일반적으로 쿼터니언을 사용하는 것이 좋습니다. 오히려 오일러 각도의 한계 (예 : 짐발 잠금과 같은 문제)가 발생하지 않기 때문입니다. 복잡한 회전 (예 : 3 축)이 필요할 때마다 쿼터니언을 사용하십시오. 오일러 각은 간단한 것들만으로도 충분합니다. –
오일러 앵글을 사용하는 이유는 내가 그들을 제약 할 수 있기 때문입니다. 나는 쿼터니언을 제한하는 방법을 모른다. – KTC
http://www.geometrictools.com/Documentation/ConstrainedQuaternions.pdf –