회전축과 회전각으로 쿼터니언을 만들면 이 쿼터니언은 해당 회전축으로 회전각만큼 회전시키는 용도로 사용할 수 있다. 또한 이 쿼터니언의 벡터 부분만 가져다 사용하면 크기만 다를뿐 회전축에 해당하는 벡터를 그대로 사용할 수 있다.
예를 들어 UpVector와 40도를 전달하여 쿼터니언을 만들었다면, 이 쿼터니언을 가시적으로 출력해보면 크기만 다를뿐 UpVector와 방향은 동일하다. 물론 이는 쿼터니언에 대한 제대로 된 이해가 되었다면 당연한 결과이다.
하지만 난 이해를 잘 못해서 고생했다.. 복잡하거나 어려운 개념을 보면 쉬운 개념까지 망각하거나 헷갈리게 된다.
다른 사람의 코드를 보다가 쿼터니언과 쿼터니언을 cross product하는 게 무슨 의미인지 궁금해서 실험해 보았다. 물론 쿼터니언을 잘 이해하고 있었으면 그냥 두 회전축을 외적하는 거라는 것을 알았을 테지만..
전구의 정면에 보이는 흰색과 노란색으로 겹쳐진 선이 정면 벡터이다. 파란색과 흰색이 겹쳐진 방향이 Up 방향이다.
정면 벡터와 Up 벡터를 외적하면 빨간색 방향의 벡터가 나온다. 이 빨간색 벡터를 회전축으로 하고 theta만큼을 회전하는 쿼터니언을 생성하고 그 쿼터니언의 벡터 부분을 위와 같이 출력하면 그대로 빨간색 벡터와 방향이 일치한다. 즉 쿼터니언의 회전축과 동일하다. 또한 Up 방향을 회전축으로 하고 theta를 회전각으로 하는 쿼터니언을 생성하면 파란색 벡터가 된다. 이 또한 기존의 회전축과 동일하다. 그리고 이 두 쿼터니언을 cross product(red X blue)하면 초록색 방향의 벡터가 나온다.
'게임 공부 > Computer graphics' 카테고리의 다른 글
광선 추적(Ray Tracing)은 무엇인가? - (2) (0) | 2021.04.27 |
---|---|
광선 추적(Ray Tracing)은 무엇인가? - (1) (2) | 2021.04.23 |
조명(Lighting) 기초 (0) | 2021.03.12 |
5 - 출력 병합(Output merging) (0) | 2020.08.13 |
4 - 프래그먼트 처리(Fragment processing) (0) | 2020.08.10 |
댓글