예지의 개발 로그포스 (Yeji's Log Force)

[Graphics Study] 변환 - 3D 본문

CS/Computer Graphics

[Graphics Study] 변환 - 3D

Yeji Heo 2022. 11. 9. 14:31

- Scaling

2차원의 축소확대인자 Sx, Sy에 Z좌표 개념 Sz를 추가해준다.

Sx * X, Sy * Y를 했던 것처럼 Sz * Z를 해주면 된다.

3D에서의 폴리건메쉬를 구성하는 모든 정점에 변환을 적용해주기만 하면 된다.

 

- Rotation

2차원에서 회전은 '점'을 중심으로 이루어 졌다.

3차원에서는 '축'을 중심으로 한다.(x, y, z축)

 

+ 축 중심의 회전에서는 해당 축이 나를 가리킨다고 생각하고 정면으로 바라본다고 상상하면 편하다.

예를 들어 x축 회전은 x축이 내 눈앞에서 나를 가리키고있고, 저 뒤편에 y, z가 반시계 방향으로 회전한다고 생각하면 쉽다.

 

* Z축을 중심으로 회전, Rz(θ)

z축을 기준으로 회전하면 x좌표는 당연히 그대로이고 x, y 만 이동할 것이다.

즉 z' = z이고 x, y의 경우 점을 기준으로 회전한 거랑 다를 바 없으니 2D에서 점을 기준으로 회전한 것처럼

x' = xcosθ - ysinθ

y' = xsinθ + ycosθ

 

* X축을 중심으로 회전, Rx(θ)

역시나 x축을 기준으로 회전했으니 x' = x일 것이다. 

y, z 의 경우 z축 중심의 회전에서와 아이디어는 동일하다. z축 중심 회전에서 x->y로 회전했다면, x축 중심에서 y->z로 회전할 때 역할만 바뀌었을 뿐이기 때문이다.

즉, x', y'을 구하던 식에서 x를 y로, y를 z로 바꿔주기만 하면 된다.

y' = ycosθ - zsinθ

z' = ysinθ + zcosθ

 

* Y축을 중심으로 회전, Ry(θ)

x축 회전의 개념과 동일

 

+ 점 중심 회전에서 회전값θ는 반시계방향 회전 기준이었다. 시계방향은 -θ를 대입해야 했었다.

3D에서의 축 중심 회전도 마찬가지로 시계 방향의 회전은 음수각도 -θ를 써야 한다.

 

- Translation

2D에서 3x3 단위 벡터를 사용해 표현하고 연산했다면, 3D에서는 4x4 단위벡터(I)행렬로 표현한다.

Comments