Computer Graphics - Lecture 03 - Virtual Cameras and the Transformation Pipeline💻 Anton Gerdelan
Slides from when I was teaching CS4052 Computer Graphics at Trinity College Dublin in Ireland.
These slides aren't used any more so they may as well be available to the public!
There are some mistakes in the slides, I'll try to comment below these.
Computer Graphics - Lecture 03 - Virtual Cameras and the Transformation Pipeline💻 Anton Gerdelan
Slides from when I was teaching CS4052 Computer Graphics at Trinity College Dublin in Ireland.
These slides aren't used any more so they may as well be available to the public!
There are some mistakes in the slides, I'll try to comment below these.
"R을 이용한 데이터 처리 & 분석 실무 - 서민구 지음" 정리 자료 #4
- https://thebook.io/006723/
- 첫번째 : goo.gl/FJjOlq
- 두번째 : goo.gl/Wdb90g
- 세번째 : goo.gl/80VGcn
- 네번째 : goo.gl/lblUsR
2. x
y
P(x,y)
앞으로 두가지 좌표계를 이용해서 회전에 대해 풀어서 설명할 것이다.
1. 우리가 보통 쓰는 xyz직교 좌표계
- (x,y,z)로 임의의 점을 표현
2. 또 다른 극 좌표계라는 것을 사용
- 임의의 한 점을 r(원점으로부터의 거리)와 @(x축으로부터 떨어진 각도(반시계방향)) 로 표현한다.
- (x축위의 길이 r짜리 직선을 @도 만큼 회전하는 것을 상상해보자)
@
P(r,@)
같은 점을 두 가지
방법으로 표현
3. x
y
@
P(x,y)
P’(x’,y’)
$
1. 딱 봐도 극 좌표계로는 회전을 표현하기 쉬워보인다.
- 길이가 2인 직선을 x축에서 90도 회전한 점 = (2, 90)(여기서 도가 각도법인지 라디안법인지는 상관 말자. 어짜피 그건 리소스일뿐 공식은 똑같다.)
- 길이가 4인 직선을 x축에서 30도 회전한 점 = (4, 30)
- 으로 표현이 가능하다.
2. 그럼 극 좌표계를 xyz직교 좌표계로 변환 시킬 줄만 알면 회전은 쉽게 풀리겠다.
@
$
P(r,@)
P’(r,@+$)
같은 점을 두 가지
방법으로 표현
4. @
P(r,@)
극 좌표계로 표현된 어떤 점
P(r, @)은
xyz직교 좌표계로
P.x = r cos @
P.y = r sin @
로 표현이 가능하겠다.
P.x
P.y
cos @ = 밑변/빗변
빗변 * cos @ = 밑변
sin @ = 높이/빗변
빗변 * sin @ = 높이
이기 때문이다.
극 좌표계를 xyz직교 좌표계로 변환 시키는 일은 어렵지 않다.
5. 그럼 이제 본론인 회전에 대해서 강구해보자.
@
P(r,@)
P를 P’으로 $만큼 회전시킨다고 했을 때,
P’은 (r, @+$)
가 되고, xyz직교 좌표계로는
P’.x = r cos(@+$)
P’.y = r sin(@+$)
덧셈을 풀어내면
P’.x = r * (cos(@)cos($) – sin(@)sin($))
P’.y = r * (sin(@)cos($) + cos(@)sin($))
P’.x = rcos(@)cos($) – rsin(@)sin($)
P’.y = rsin(@)cos($) + rcos(@)sin($)
여기서 rcos(@)와 rsin(@)는
이전의 점 P의 극 좌표계의 x,y이므로, 점
P의 xyz직교 좌표계로도 표현이 가능하
다.
P’.x = P.x * cos($) – P.y * sin($)
P’.y = P.y * cos($) + P.x * sin($)
P.x
P.y
삼각함수 덧셈 정리
sin(@+$) = sin(@)cos($) + cos(@)sin($)
cos(@+$) = cos(@)cos($) – sin(@)sin($)
이게 이해가 안되면, “삼각함수의 덧셈 정리”
라는 키워드로 검색해보라.
P’(r,@+$)
$
6. P(x,y)
점 P의 x와 y의 위치를 바꾸고 x의 부호를 뒤집으면 항상 P와 직각인 벡터가 만들어진다.
P’.x = P.x * cos($) – P.y * sin($)
P’.y = P.y * cos($) + P.x * sin($)
이 식에서 볼 수 있듯이,
어떤 한 점이 주어지고, 각도를 주면
회전된 P’을 구할 수 있게 되었다.
좀 더 자세히 파고 들면, P(x,y)와
Q(-P.y,P.x)는 항상 직각을 이루는 벡
터이다.
P’.x = P.x * cos($) + Q.x * sin($)
P’.y = P.y * cos($) + Q.y * sin($)
때문에 다시 말하면,
“벡터P(x,y)와 반시계 방향으로 90도 직
각인 벡터 Q(-p.y, p.x)가 있을 때,
P’ = P * cos($) + Q * sin($)
로 모든 회전을 표현할 수 있다.”
라고 말 할 수 있다.
Q(-P.y, P.x)
(직각이다…)
7. P(x,y,z)
“벡터P(x,y)와 반시계 방향으로 90도
직각인 벡터 Q(-p.y, p.x)가 있을 때,
P’ = P * cos($) + Q * sin($)
로 모든 회전을 표현할 수 있다.”
Q(-P.y, P.x, P.z)
이건 2차원의 회전이지만, 3차원의 회전에서도 똑같이 적용할 수 있다.
위 변환을 3차원 공간에서의 회전이라고 생각해본다면,
(지금 z축은 모니터를 속으로 들어가는 방향이라고 3D적으로 상상을 해보라)
x’ = P.x * cos($) + -P.y * sin($)
y’ = P.y * cos($) + P.x * sin($)
z’ = z
현재 z축을 기준으로 회전한다고 볼 수 있는 것이다.
x
y
8. P(y,z,x)
“벡터P(x,y)와 반시계 방향으로 90도
직각인 벡터 Q(-p.y, p.x)가 있을 때,
P’ = P * cos($) + Q * sin($)
로 모든 회전을 표현할 수 있다.”
Q(-P.z, P.y, P.x)
같은 원리로 X축 기준으로 회전한다 생각하면,
(지금 x축은 모니터를 속으로 들어가는 방향이라고3D적으로 상상을 해보라)
x’ = x
y’ = P.y * cos($) + -P.z * sin($)
z’ = P.z * cos($) + P.y * sin($)
y
z
9. P(z,x,y)
Q(-P.x,P.z,P.y)
같은 원리로 Y축 기준으로 회전한다 생각하면,
(지금 y축은 모니터를 속으로 들어가는 방향이라고 3D적으로 상상을 해보라)(xz가 아니라 zx기 때문에 얘만 생긴 게 좀 틀리다)
y’ = y
z’ = P.z * cos($) + -P.x * sin($)
x’ = P.x * cos($) + P.z * sin($)
z
x
“벡터P(x,y)와 반시계 방향으로 90도
직각인 벡터 Q(-p.y, p.x)가 있을 때,
P’ = P * cos($) + Q * sin($)
로 모든 회전을 표현할 수 있다.”