컴퓨터 그래픽스

6.30 4장 - 좌표계와 변환

새우급여기 2024. 6. 30. 19:48

Scaling(축소, 확대)

→ 행렬의 곱셈으로 표현됨.

축소, 확대 인자 모두 2인 경우

-> x, y 방향 모두 2배 확대된 다각형 얻을 수 있음. 축소도 같은 원리

 

 

Rotation (회전 변환)

 

다음과 같이 정리 할 수 있음.

행렬의 곱셈으로 나타내면 다음과 같다. 2 * 2 행렬이 R(θ)이다.

 

 

첫 번째 그림은 θ 를, 가운데 그림은 - θ 를 넣어 얻은 행렬을 적용한 모습이다. 

이는 반시계 방향으로 270도 회전한 것과 같으며 세 번째 그림에서 확인 가능하다.

 

Translation

주어진 점 x, y를 dx, dy만큼 이동시키는 것을 뜻함.

 벡터의 곱셈으로 나타냈던 축소&변환, 회전 변환과 다르게 벡터의 덧셈으로 표현이 됨.

--> 동차 좌표를 통해 벡터의 곱셈으로 통일 가능하다.

 

(x,y)가 주어지면 -> (x, y, 1)이 동차 좌표가 된다.

 

동차 좌표는 세 번째 좌표가 반드시 1로 국한되는가? 그것은 아님!!

0만 아니라면 어떤 값이든 가능하다.

ex) (2,3) 파티션 좌표가 있다면 동차 좌표는

(2,3,1), (4,6,2), (6,9,3), etc 무한히 많이 존재한다.

 

점들을 아래 사진처럼 이으면 무한히 긴 직선이 된다.

 

 동차좌표를 카테시안 좌표로 변환할 때는

(X, Y, w) 모두 w로 나누어 (X/w, Y/w, 1)을 만들고, (X/w, Y/w)을 도출해낸다.

 

 

-> 확대

 

 

2차원 변환의 결합

지금까지 배운 S, R, T 변환을 결합할 수 있다.

AB != BA

 

원점이 아닌 임의의 점을 통해 로테이션도 가능함.

(3,2)를 원점으로 이동시킴. -> 회전 적용시킬 (5,2)도 (2,0)의 좌표 가지게 됨 -> 90도 회전 -> 원상복귀

 

아핀 변환

세 번째 행은 항상 0 0 1 고정.

그러므로 나머지 2 * 3 행렬을 [L|t]로 나타낸다. L은 좌측 상단 2 * 2 행렬이며 t는 3번 열을 의미한다.

t - 선형 변환 요소가 들어갈 수 있음

 

[L|t]를 개념적으로 바라보면

  • L은 첫 번째로 적용됨
  • 선형 변환된 물체에 t를 적용하는 것
  • 각 정점을 p라고 할 떄 Lp + t 방식으로 변환되는 것임
  • [L|t]에 R, S, T 포함됨

Rigid-body motion(강체)

 

 

3D Scaling

축소 확대 인자 모두 같으면(두 번째) uniform, 그렇지 않으면(세 번째) non-uniform이라고 칭함.

3 * 3 행렬로 표현이 됨.

(a)는 z축 중심으로 90도 회전한 것이다. 3차원 회전은 회전축을 필요로 한다.

회전 후에도 z 좌표는 그대로 유지가 된다.

 

(b)는 x축을 중심으로 회전시켰다. 마찬가지로 회전 후에도 x 좌표는 같다.

y축 회전도 z, x축 회전과 동일하다.

 

 

 

축 회전 방향에 따라 세타의 부호를 결정함 = 오른손 법칙

엄지를 회전축과 나란하게 하면 네 손가락이 감싸쥐는 방향이 회전 방향이다.

 

 

월드 변환

구, 주전자는 각각 나름의 object space에서 만들어짐. -> world space를 따로 만들어 함께 배치함.

 

3D 아핀변환은 다음과 같다.

 

 

, Object-space 기저

모델링이 끝나면 오브젝트는 오브젝트 공간과 결박되어 있다고 이해하면 됨. 분리 불가능.

 

OS 기저는 { u, v, n}으로 표현하는 것이 관례.

WS 기저는 {e1, e2, e3}으로 표현함.

초기 조건은 OS = WS

물체를 회전시키면 u, v, n은 함께 이동함.

 

역변환

x, y, z 좌표 점을 -dx, -dy, -dz만큼 옮김.

이전의 변환을 무효화 시키는 것이 기본적인 역변환의 역할임.

역수 이용함.

 

 

역회전

-> 단위 행렬

위의 수식은 아래와 같은 결과를 보이고 있음. 회전의 전치 행렬은 역변환과 같다.

유용하게 쓰이는 개념이므로 잘 숙지할 것.

 

 

이미지 출처

[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]

 

'컴퓨터 그래픽스' 카테고리의 다른 글

2024.7.6(토) 6장 OpenGL ES와 쉐이더  (0) 2024.07.12
2024.7.4(목) 5장 - 정점 처리  (0) 2024.07.07
6.29 3장 - 모델링  (0) 2024.06.30
6.27 2장 - 수학 기초  (1) 2024.06.30
6.25 1장 - 서론  (0) 2024.06.30