Post

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.