📌 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)
'[그래픽스]' 카테고리의 다른 글
[그래픽스] OpenGL 카메라 : 평행 관측, 투시 관측, 투영 (0) | 2024.02.07 |
---|---|
[그래픽스] CTM이란?, OpenGL Coordinate System 실습 (2) | 2024.02.07 |
[그래픽스] Transformations : Rotation, Scaling, Reflection, Inverse, Transformation의 순서, 변환 순서 (2) | 2024.02.07 |
[그래픽스] 데카르트 기하학, 아핀공간, 동차좌표계 (0) | 2024.02.06 |
[그래픽스] 그래픽스를 위한 기초 수학 : 벡터, 내적, 외적, 점, 선, 행렬 (2) | 2024.02.05 |