728x90
반응형
12.2 물체 회전
- 위 그림은 터치스크린에서 손가락을 밀어 주전자를 회전시키는 것을 보여준다.
- 손가락 끝의 궤적을 추적해서 얻은 터치스크린 위의 2차원 점들을 {p_1, p_2, p_3...}이라고 할때, 이웃한 두 점 p_i와 p_i+1이 있다고 하자.
- 물체 회전을 효율적으로 구현하기 위해서, 해상도 w x h의 터치스크린을 2 x 2 크기의 정사각형으로 변환할 것인데, 이 변환을 p_i와 p_i+1에 적용해 q_i와 q_i+1을 얻는다.
- 터치스크린 위의 점 p와 정사각형 스크린 위의 점 q의 좌표를 각각 (x, y)와 (x', y')로 표기할 때, (x, y)와 (x', y')의 관계는 다음과 같다.
- x는 [0, w], y는 [0, h], x'와 y'는 [-1, 1] 범위에 있다.
- 정사각형 스크린 뒤에는 아크볼(arcball)이라는 가상의 구가 존재하고, 이는 2x2x2 크기의 정육면체 안에 놓여 있는데, 그 중심 좌표는 (0, 0, 0)이고 반지름은 1이다. (정규화됨)
- 스크린 위에서 움직이는 손가락은 이 아크볼을 정육면체 안에서 돌릴 것이고 그만큼 주전자가 회전할 것이다.
- 정사각형 스크린의 q를 -z축을 따라 아크볼 표면에 투영하고, 좌표계 원점과 이 투영점을 이은 벡터를 v라고 할 때, q와 v의 xy좌표는 같다.
- 아크볼 반지름은 1이고 v는 단위 벡터 이므로, 위의 식과 같다.
- 하지만, 이러한 방식으로 v의 좌표를 계산할 수 없는 경우가 존재하는데, 즉, 위의 식과 같다면 q는 아크볼 표면으로 투영되지 않는다. 이 경우, q를 먼저 3차원 좌표계의 xy평면으로 1차 투영한다.
- 이 투영점을 정규화 하고 (q_x, q_y, 0)을 자기 자신의 길이로 나눈다.
- 우리가 원하는 회전은 v_i를 v_i+1로 옮기는 것이다. 이러한 회전은 v_i와 v_i+1에 모두 수직인 회전축 그리고 v_i와 v_i+1 사이의 회전각 ∂에 의해 정의된다.
- 회전축은 v_i와 v_i+1의 벡터곱과 같다.
- 이렇게 회전된 물체는 GPU 파이프라인을 통해 즉각 스크린에 렌더링되어야 한다.
- 실제 회전은 GPU 파이프라인의 첫 연산인 월드 변환보다 앞서 적용되어야 한다. 즉, 물체를 회전시킨 후 월드 변환, 뷰 변환 등을 거쳐 최종 스크린에 출력해야 한다. 따라서, 앞서 구한 회전축은 오브젝트 공간으로 변환되어야 한다.
- 이때까지 나온 아크볼 공간은 GPU 파이프 라인에 존재하는 것이 아니라, 우리가 임시로 만들었기 때문에 아크볼 공간의 회전축을 카메라 공간으로 그대로 옮겨야 한다.
- 이렇게 카메라 공간의 벡터가 주어지면, 12.1.3절에서 배운것처럼 이를 오브젝트 공간으로 변환할 수 있다.
- 월드 변환 행렬을 M 이라고 하고, 오브젝트 공간으로 변환된 회전축을 이용해 계산한 회전 행렬을 R_1이라고 할 때, MR_1이 정점 쉐이더에게 새로운 월드 변환 행렬로 주어진다.
- 이렇게 해야, p_1에서 p_2로 이동한 손가락에 의해 회전된 물체가 GPU 파이프라인을 거쳐 렌더링될 것이다.
- 이러한 p_n에서 p_n+1로의 이동을 포함한 모든 손가락 움직임에 대해 이와 같은 연산이 반복적으로 이루어진다.
출처
한정현 - [OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]을 보고 공부하고 정리한 내용입니다.
728x90
'공부 > Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문' 카테고리의 다른 글
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 13 - 캐릭터 애니메이션 [2/4] (0) | 2022.05.26 |
---|---|
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 13 - 캐릭터 애니메이션 [1/4] (0) | 2022.05.20 |
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 12 - 스크린 물체 조작 [1/2] (0) | 2022.03.16 |
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 11 - 오일러 변환 및 쿼터니언 [2/2] (0) | 2022.03.11 |
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 11 - 오일러 변환 및 쿼터니언 [1/2] (0) | 2022.03.11 |