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축의 최소 및 최대 값 (가시부피의 전후 거리)
투영 과정
- Shoot 단계:
- 정점 투영: 물체의 모든 정점(Vertex)은 Z축에 수직으로 투영되어 가시부피의 앞면(z = -near 평면)에 사영됩니다.
- 좌표 변화:
- X, Y 좌표: 그대로 유지됩니다.
- Z 좌표:
-near
값으로 변경됩니다.
- 클리핑(Clipping):
- 정점의 Z 좌표가
glOrtho
에서 설정한near
와far
범위를 벗어나면 해당 정점은 클리핑되어 화면에 표시되지 않습니다.
- 정점의 Z 좌표가
- 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.