좌표계
- Object들은 Local space 기준으로 기술.
- Local space -> World space -> View space -> Canonical space로 변환.
- OpenGL의 그림은 [-1, 1] 사이로 normalized된 Canonical space에 그려진다.
- 3개의 transform을 각각 Model matrix, View matrix, Projection matrix라 함. 합쳐서 MVP matrix라고 부름.
- Vclip=MprojectionMviewMmodelVlocal
- Canonical space에서 -1, 1 범위 밖으로 벗어난 면들을 cliping을 거침.
-
Orthogonal Projection
- 평행한 선이 계속 평행하도록 투영.
- left, right, bottom, top, near, far를 통해 행렬이 결정됨.
- 변환 후에는 RHS에서 LHS로 변경됨.
- ⎝⎜⎜⎜⎛r−l20000t−b20000f−n−20−r−lr+l−t−bt+b−f−nf+n1⎠⎟⎟⎟⎞
이미지 출처
-
Perspective Projection
- 평행한 선이 한 점(소실점)에서 만나도록 변환.
- 멀리 있는 물체일수록 작게보이는 원근감이 발생.
- aspect ratio, fov, near, far를 통해 결정됨.
- ⎝⎜⎜⎜⎜⎛aspect∗tan(fov/2)10000tan(fov/2)10000−f−nf+n−100−f−n2∗f∗n0⎠⎟⎟⎟⎟⎞
-
Depth Buffer
- 각 픽셀의 컬러값 이외에 depth 값을 저장.
- depth test를 통해 해당 픽셀을 그릴 지 선택.(뒤에있는 물체는 그릴 필요 없기 때문.)
-
Depth Test
- OpenGL의 Depth Buffer 초기값 = 1
- 가장 뒤 = 1 / 가장 앞 = 0 (LHS)
glEnable(GL_DEPTH_TEST);
카메라
- 파라미터
- camera position(e) : 카메라 위치
- camera target(t) : 카메라가 바라보는 중심 위치
- camera up vector(u) : 카메라 화면의 세로 축 방향
z=∣∣e−t∣∣e−t , 카메라에서 target을 바라보는 크기가 1인 벡터
x=∣∣u×z∣∣u×z, u와 z에 모두 수직인 크기가 1인 벡터
y=z×x
p=e
결과 행렬 : 카메라의 world -> local transform matrix
- ⎝⎜⎜⎜⎛xTyTzT0−xTp−yTp−zTp1⎠⎟⎟⎟⎞