2011-08-11 9 views
1

나는 막대기를 만드는 데 OpenGL es를 사용하고 있는데 이것은 어리석은 질문처럼 보일 수 있지만 회전을 나타 내기 위해 쿼터니언을 사용할 때는 회전이 원점보다 다른 점 주위에 있도록하려면 어떻게해야합니까? 나는 단위 쿼터니언을 사용하는지 아닌지를 사용합니다. 내 생각 엔 회전 할 수 있고 회전 중심을 너무 바꿔서 단위 쿼터니언을 사용하지 않을 것입니다. 이것이 올바른 길입니까?quaternions for OpenGL ES

+1

왜 단위 쿼터니언을 사용하지 않습니까? –

+0

단위 쿼터니온은 3 차원 구면에서 회전을합니다. 그리고 나는 이것이 내가 원하는 것 같지 않다는 것을 짐작했다. 회전하고자하는 점은 임의의 구체 위에있다. – Steve

+1

임의의 쿼터니언은 임의의 점을 회전시키기에 충분한 자유도를 제공하지 않는다. 3 명 필요). 오프셋 적용도 피할 수 없습니다. –

답변

1

주석 에서처럼, 비 단위 쿼터니언은 마술처럼 임의의 지점을 중심으로 회전하지 않습니다. 따라서 비 단위 쿼터니언을 사용할 필요가 없습니다. 회전 중심을 원점으로 변환하고 평소처럼 쿼터니언을 사용하여 원점을 중심으로 회전 한 다음 회전 중심으로 다시 변환해야합니다.

이 전체 변환을 하나의 수학적으로 깨끗한 구조로 나타내려면 이중 쿼터니언을 사용할 수 있지만 과장 될 것이라고 확신합니다.

+0

내가 한 일은 실제로 매우 간단합니다. 나는 오일러 각을 쿼터니언으로 변환 한 후 쿼터니언을 그 점에 곱하여 회전을 적용했습니다. – Steve

+0

예, 그렇습니까? 귀하의 질문에 당신은 임의의 지점에 대해 회전하도록 요청 했으므로 이제는 두 회전 사이에서이 회전을 감싸 야합니다. –

+0

그것은 이상한 일입니다. 내 회전 중심이 (0, -2,0)이고 회전하려는 점이 (1,0,0)이라고 가정 해 봅시다. 내가해야 할 일은 나중에 (1, -2,0)로 변환하고 회전 중심이 (0,0,0)에서 (0, -2,0)으로 자동 이동합니다. y 축에 대해 반 시계 방향으로 점 (1, -2,0)을 90도 회전하면 (0,0,0)이 아닌 (0, -2,0) 주위를 회전하는 것처럼 보입니다. 모든 번역. – Steve