월드 축 주위의 쿼터니언 및 회전


11

면책 조항 : 나는 프로 게임 프로그래머이며 며칠 동안 쿼터니언을 사용하지만 나에게 흑 마법에 가깝습니다. 나는 상대적으로 수학과 함께 집에 있지만 허수는 항상 나를 혼란스럽게합니다. 나는 쿼트를 유용한 것으로 취급하고 곱셈을 두 번 이상 뒤집는 경향이 있습니다. 나는 제한된 성공으로 행렬을 사용하는 것처럼 그들에 대해 추론하려고합니다.

아무리 해도....

나를 방해하는 것은 다음과 같습니다. 객체를 로컬 축 주위로 회전하려면 회전을 적용하려는 회전을 나타내는 쿼터니언과 곱합니다. 따라서 로컬 공간에서의 회전입니다.

이제 월드 공간에서 축을 중심으로 회전하려면 다음과 같은 추론을해야합니다. 월드 공간에서 회전을 쿼터니언으로 가져갑니다. 객체 회전의 역수에이 쿼터니언을 곱하십시오. 이것은 지역 공간에서 나의 세계 회전을 가져올 것입니다. 이 새로운 쿼터니언으로 회전을 곱하십시오. 즉 : newRot = oldRot * (역 oldRot * worldRot)

그러나 내가해야 할 일은 newRot = oldRot * (inverse oldRot * worldRot) * oldRot입니다.

왜 반전 쿼트를 곱한 후에도 적용하기 전에 내 쿼트를 곱해야합니까? 나는 완벽한 정당한 이유가 있어야한다는 것을 알고 있지만, 그 길을 벗어날 수는 없으며 나에게 좌절감을 느낍니다. 나는 다양한 자주 묻는 질문과 그 밖의 것들을 시도했지만 대부분 수학에 깊이 들어가서 명확하지 않습니다.

내가 5 살짜리처럼 나에게 이것을 설명 할 수있는 사람?


그것은 매트릭스 변환과 회전과 같지 않습니까 (예 : 객체를 중심으로 이동하고 회전 한 다음 주위로 항목을 회전 할 때 뒤로 이동해야 함 : Minv_transl * Mrot * Mtransl)
Valmond

I try to reason about them like I would with matrices-그러면 당신은 올바른 길을 가고 있습니다. 행렬을 사용하여 객체의 축과 월드의 축을 중심으로 회전하는 방법을 이해했다면 쿼터니언을 사용하여 동일한 작업을 수행 할 수 있습니다. 곱셈 순서는 행렬과 쿼터니언 모두 동일합니다.
Maik Semder

답변:


11

쿼터니언은 연관성이 있습니다.

귀하의 솔루션은 다음과 같습니다.

newRot = oldRot * (inverse oldRot * worldRot) * oldRot

이는 다음과 같습니다.

newRot = oldRot * inverse oldRot * worldRot * oldRot

이는 다음과 같습니다.

newRot = identity * worldRot * oldRot
newRot = worldRot * oldRot

실제로 실제로 발생하는 상황으로 돌아갑니다.

localTransformed = oldRot * rot
worldTransformed = rot * oldRot

신청 순서가 바뀌고 있습니다. 행렬로 돌아가서 개체 행렬을 변환 행렬에 적용하고이를 새 개체 행렬로 저장하면 로컬 공간 변환입니다. 변형 행렬을 객체 행렬에 적용하고 저장하면 이것이 바로 세계 변형입니다. 그것은 신청 순서에 관한 것이며 더 이상은 아닙니다.


1
첫 번째 부분에 +1, 두 번째 부분에 약간 오해의 소지가 있습니다. 'localRot'및 'worldRot'가 아닌 마지막 코드 샘플에서 'rot'만 사용하면 예제가 더 명확 해집니다. 그렇지 않으면 썩음 자체가 다르다는 것을 의미합니다 . 그러나 차이점은 다른 쿼터니언 ( 'localRot'및 'worldRot')이 아니라 곱셈 순서에만 있습니다. 'localTransformed'및 'worldTransformed'는 'rotatedAroundLocalAxis'및 'rotatedAroundWorldAxis'로 더 좋습니다. 그것 자체가 방정식을 설명하고 마지막 단락을 쓸모 없게 만들며, 이는 약간의 결함이 있습니다.
Maik Semder

마지막 단락의 결점 : 행렬과 변환의 차이점 (여기서는 동일하고 상호 교환 가능하므로 혼동을 방지하기 위해 행렬 만 사용하는 것이 좋습니다)과 "로컬 공간 변환"및 "세계 변환"이라는 용어 : 말하자면, 첫 번째 방정식은 물체의 로컬 축을 중심으로 회전 한 후 '로컬-월드 매트릭스'를 제공하고, 두 번째 방정식은 월드 축을 중심으로 회전 한 후 '로컬-월드 매트릭스'를 제공합니다. 두 경우 모두 얻는 것은 단순히 '로컬-월드 매트릭스'입니다. 그러나 첫 번째 부분에는 어쨌든 내 분석에 +1이 있습니다.
Maik Semder

+1 @Maik 아마도 회전과 곱셈 순서의 문제를 더 명확하게하기 위해 별도의 답변을 작성할 수 있습니까? 어느 쪽이든 의견 주셔서 감사합니다!
Max Dohme

아, 이제 말이 되네요. 나는 쿼터니언 곱셈이 연관되어 있다는 것을 몰랐다. 왼쪽은 기본적으로 '부모 공간에 회전 적용'또는 '로컬 공간에 회전 적용'이라고 말합니다 .... 매트릭스와 다릅니다. 일단 보면 아주 초등! 감사!
Kaj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.