본문 바로가기
[그래픽스]

[그래픽스] OpenGL이란? : OpenGL입문, 매트릭스모드, polygon의 조건, z-buffer

by seom-j 2024. 2. 5.

 

📌 OpenGL이란?

Open Grahpics Library로, Grapics 프로그래밍을 위한 API

 

좌표계

glVertex

내부적으로 카메라 좌표 ↔️ 화면 좌표로 변환되며 활용

 

카메라

공간의 원점에 배치하여 음의 z방향을 가리킴 (depth)

 

Orthographic Viewing(직교 시점)임

즉, 왜곡 발생 X 평면에 투영 (건축 설계도와 같음)

 

Transformations and Viewing

투영 : 투영행렬(변환)에 의해 수행

변환 함수 세트는 하나뿐이므로 매트릭스 모드를 설정해야 함

glMatrixMode(GL_PROJECTION)
// 변환함수는 증분형이므로 먼저 행렬 생성 / 볼륨 제공 투영 행렬로 변경
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); // 3차원 카메라

 

 

📌 매트릭스 모드란?

glMatrixMode() 함수를 호출하여 선택된 행렬 모드에 따라 다른 함수들이 어떤 행렬에 대해 작동할지 결정

 

예를 들어 glMatrixMode(GL_MODELVIEW) 함수를 호출하여 모델뷰 행렬 모드를 선택하면 이후에 호출되는 glTranslate(), glRotate() 등의 함수는 모델뷰 행렬에 대해서만 적용됨

마찬가지로, glMatrixMode(GL_PROJECTION) 함수를 호출하여 투영 행렬 모드를 선택하면 이후에 호출되는 glFrustum(), gluPerspective() 등의 함수는 투영 행렬에 대해서만 적용됨

 

즉, 선택된 매트릭스 모드에 따라 어떤 행렬에 대해 작동할지 결정함

 

 

📌 Polygon의 조건

  • simple : cannot cross
  • convex : 두 점 사이의 점도 뾰족한 모서리여야 함 (굴곡X)
  • flat : in the same plane

위와 같은 맥락에서

리본 : nonsimple polygon

별 : nonconvex polygon

 

좌표를 활용하여 polygon을 제작할 시, 해당 조건을 만족하도록 주의

 

 

📌 Hidden-Surface Removal

특점 시야에서 바라볼 경우, OpenGL은 z-buffer라는 숨겨진 표면 메소드를 사용함

z-buffer는 깊이 정보를 저장하며 픽셀들이 화면에 그려질 때마다 해당 위치의 z값을 비교하여 가장 깊이가 작은 값만 화면에 표시

 

즉 객체가 렌더링될 때, 깊이 정보를 저장하여 시야에서 보이는 전면 객체만 표시되도록 함

// 메인에서 요청
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH) // GLUT_DEPTH !

// INIT에서 활성화
glEnable(GL_DEPTH_TEST)

// 디스플레이 콜백에서 지워짐 !
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)