2017년 7월 26일 수요일

어떤 오브젝트의 Mirror 된 회전 값은? (쿼터니언 거울 반전)

쿼터니언으로 미러링 할 때 메모

오일러앵글이 아니라 쿼터니언의 회전은 이해하기 어려울 수 있다.
회전각을 반전시키는 것은 더더욱...

예를 들기 위해 obj의 로컬로테이션을 미러하고 싶다고 가정했다.

보통은 아래와 같이 생각하지만,
new Quaternion(obj.localRotation.x * -1.0f, obj.localRotation.y, obj.localRotation.z, obj.localRotation.w);

실제로는 아래와 같아야 하고,
new Quaternion(obj.localRotation.x * -1.0f, obj.localRotation.y, obj.localRotation.z, obj.localRotation.w * -1.0f);

위도 비슷하지만 비틀림이 있기 때문에 아래와 같이 사용하는 것이 옳다.
new Quaternion(obj.localRotation.x, obj.localRotation.y * -1.0f, obj.localRotation.z * -1.0f, obj.localRotation.w);

참고 URL : https://www.gamedev.net/forums/topic/599824-mirroring-a-quaternion-against-the-yz-plane/


추가 메모  :
카메라 방향이 그대로 일 때 어떤 오브젝트의 이동과 회전을 거울 반전시키려면
포지션 x 축도 바꿔준다. (localPosition.x * - 0.1f)