Open Graphics Library 6
1. OpenGL 좌표계 변환 순서
- Model Coordinate: 물체가 정의된 좌표계.
- World Coordinate: 물체들이 위치한 세계 좌표계.
- Eye Coordinate: 카메라(관찰자)가 바라보는 기준 좌표계.
- Clip Coordinate: 클리핑을 위한 좌표계, 시야 범위를 벗어난 물체를 제거.
- Normalized Device Coordinate: 정규화된 좌표계.
- Screen Coordinate: 최종 화면에 출력되는 좌표계.
2. Eye Coordinate System
- 카메라의 위치를 원점으로 보고, 카메라가 바라보는 방향과 직교하는 좌표계를 설정합니다.
- 카메라 기준 좌표축:
- +Z축: 카메라에서 멀어지는 방향 (기본적으로 OpenGL에서는 -Z 방향으로 카메라가 바라봄).
- +X축: 기본 Up 벡터와 +Z축 벡터의 외적을 통해 구함.
- +Y축: +Z축과 +X축의 외적을 통해 구함.
3. View Matrix
- 역할: World Coordinate를 Eye Coordinate로 변환하는 4x4 행렬.
- 구성: 회전 행렬과 평행 이동 행렬의 조합.
- gluLookAt 함수:
gluLookAt(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ)
eye
는 카메라 위치,center
는 바라보는 지점,up
은 카메라의 위쪽 방향을 지정.- 예:
gluLookAt(0.0, 0.0, 15.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
4. Backface Culling (후면 제거)
- 정의: 카메라에서 보이지 않는 면(back face)을 제거하여 렌더링 성능을 향상.
- 법선 벡터(Normal Vector)와의 관계:
- 법선 벡터 방향이 카메라로부터 멀어지면 back face, 카메라 방향을 향하면 front face.
- 뷰 벡터(View Vector): 물체의 면에서 카메라를 향하는 벡터.
- 면이 front face인지 back face인지 판단하기 위해
뷰 벡터(V)와 법선 벡터(N)의 내적
을 이용 (V • N < 0
이면 back face).
5. Orientation (방향)과 시계/반시계 구분
- Orientation은 viewer가 보았을 때 시계방향(CW) 또는 반시계방향(CCW)으로 결정됩니다.
- OpenGL에서 일반적으로 반시계 방향(CCW)을 front face로 간주합니다.
glPolygonMode
를 사용하여 front face와 back face를 다르게 표시 가능:1 2
glPolygonMode(GL_FRONT, GL_FILL); // front face는 채우기 glPolygonMode(GL_BACK, GL_LINE); // back face는 선으로만 표시
This post is licensed under CC BY 4.0 by the author.