Post

Open Graphics Library 2

1. 직교투영(Orthogonal Projection)과 Viewing Volume

직교투영(Orthogonal Projection)

  • 원근감 없이 물체를 투영하는 방식으로, 물체의 거리에 관계없이 크기가 동일하게 표현됩니다.
  • 특징:
    • 크기 불변성: 물체가 멀어져도 크기가 변하지 않습니다.
    • 직육면체 가시부피: 직교투영에서는 Viewing Volume이 직육면체 형태를 가집니다.

Viewing Volume(가시부피)

  • 3차원 공간에서 물체가 보여질 수 있는 영역을 의미하며, 직교투영에서는 이 영역이 직육면체입니다.
  • 설정 방법:
    • glOrtho(left, right, bottom, top, near, far) 함수의 매개변수를 통해 가시부피의 경계를 설정합니다.
      • left, right: X축의 최소 및 최대 값
      • bottom, top: Y축의 최소 및 최대 값
      • near, far: Z축의 최소 및 최대 값 (가시부피의 전후 거리)

투영 과정

  1. Shoot 단계:
    • 정점 투영: 물체의 모든 정점(Vertex)은 Z축에 수직으로 투영되어 가시부피의 앞면(z = -near 평면)에 사영됩니다.
    • 좌표 변화:
      • X, Y 좌표: 그대로 유지됩니다.
      • Z 좌표: -near 값으로 변경됩니다.
    • 클리핑(Clipping):
      • 정점의 Z 좌표가 glOrtho에서 설정한 nearfar 범위를 벗어나면 해당 정점은 클리핑되어 화면에 표시되지 않습니다.
  2. Print 단계:
    • 스케일링: 투영된 물체는 OpenGL 윈도우에 맞게 비례적으로 확대 또는 축소됩니다.
    • 뷰포트 매핑: 가시부피의 앞면에 사영된 2D 이미지는 뷰포트(Viewport)에 매핑되어 화면에 출력됩니다.

2. Geometric Primitives (기하학적 프리미티브)

  • OpenGL에서 기본적으로 제공하는 기하학적 객체를 의미합니다.
  • 기본 프리미티브 종류:
    • GL_POINTS: 점
    • GL_LINES: 선
    • GL_POLYGON: 다각형
    • GL_QUADS, GL_TRIANGLES: 사각형, 삼각형 등
  • _STRIP: GL_TRIANGLES_STRIP은 삼각형 더미를 그린다.

3. Polygon Basics (다각형의 기본 정의)

  • 다각형(Polygon): 경계가 명확하고 내부가 잘 정의된 객체를 의미합니다.
  • 특성:
    • Simple polygon: 간단한 다각형으로, 변이 서로 교차하지 않는 경우.
    • Convex polygon: 다각형 내 임의의 두 점을 잇는 선분이 항상 다각형 내부에 있는 경우.
    • Regular polygon: 모든 변의 길이와 각도가 같은 다각형.
      • n-gon: 변의 길이가 n개인 regular polygon
      • n-gon에서 n이 커지면 원에 가까워 진다

4. Triangulation (삼각분할)

  • 다각형을 삼각형의 집합으로 분할하는 과정으로, OpenGL은 일반적으로 다각형을 삼각형으로 분할하여 렌더링합니다.
  • Delaunay Triangulation: 긴 삼각형을 피하고 가능한 한 정삼각형에 가까운 모양을 만드는 삼각분할 방법입니다. (각 삼각형의 외접원에 서로의 정점이 들어가지 않게)
  • Long thin triangles : 픽셀 정확도 문제, 렌더링 성능 저하, 부동 소수점 오차 이슈 등의 원인

5. Orientation (정점의 순서)

  • 정점의 작성 순서에 따라 다각형이 시계 방향(CW) 또는 반시계 방향(CCW, Counter-ClockWise)으로 그려질 수 있습니다.
  • OpenGL은 기본적으로 CCW(반시계 방향)를 사용합니다.

6. GL_TRIANGLE_STRIP과 GL_TRIANGLE_FAN

  • GL_TRIANGLE_STRIP: 일련의 삼각형을 연결하여 그리는 방식으로 정점의 순서에 주의해야 합니다.
  • GL_TRIANGLE_FAN: 첫 번째 정점을 중심으로 나머지 정점들과 연결하여 삼각형을 그리는 방식입니다.

7. OpenGL에서 Non-convex Polygon 그리기

  • OpenGL은 비볼록(non-convex) 다각형을 그릴 때 GL_TRIANGLE_FAN을 사용하여 n-2개의 삼각형으로 분할하여 그립니다.
  • 비볼록 다각형의 경우 제대로 표현되지 않을 수 있으므로 주의가 필요합니다.

8. glPolygonMode

  • glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)은 폴리곤을 선으로만 그리도록 설정하는 함수입니다. 마지막 매개변수에 GL_FILL로 다각형을 채워 그릴 수 있습니다.
  • 모델의 경계를 시각적으로 확인하거나 디버깅할 때 유용합니다.
This post is licensed under CC BY 4.0 by the author.