끝
시작하기 챕터를 마치신 것을 축하드립니다. 이제 창을 만들고, 셰이더를 생성 및 컴파일하고, 버퍼 객체나 유니폼을 통해 정점 데이터를 셰이더로 전달하고, 객체를 그리고, 텍스처를 사용하고, 벡터와 행렬을 이해하고, 이 모든 지식을 결합하여 카메라가 있는 완전한 3D 장면을 만들어 조작할 수 있게 되셨을 것입니다.
휴, 지난 몇 장에서 정말 많은 것을 배웠네요. 배운 내용을 활용해서 직접 실험해 보거나, 문제에 대한 자신만의 아이디어와 해결책을 생각해 보세요. 지금까지 다룬 모든 내용을 충분히 이해했다고 생각되면 다음 조명 장으로 넘어가세요.
용어
-
OpenGL: 각 함수의 구조와 출력 방식을 정의하는 그래픽 API의 공식 명세.
-
GLAD: 모든 OpenGL 함수 포인터를 불러오고 설정해 주는 확장 로딩 라이브러리로, 최신 OpenGL 기능을 사용할 수 있게 해줌.
-
Viewport(뷰포트): 렌더링이 이루어지는 2D 창 영역.
-
Graphics Pipeline(그래픽스 파이프라인): 정점이 화면의 한 픽셀 이상으로 출력되기까지 거치는 전체 과정.
-
Shader(셰이더): 그래픽 카드에서 실행되는 작은 프로그램. 그래픽스 파이프라인의 여러 단계에서 기존 기능을 대체하기 위해 사용자 정의 셰이더를 사용할 수 있음.
-
Vertex(정점): 하나의 점을 나타내는 데이터 집합.
-
Normalized Device Coordinates(정규화된 장치 좌표, NDC): 클립 좌표에서 원근 투영 후 정점이 도착하는 좌표계. NDC에서 -1.0과 1.0 사이에 있는 정점은 잘리지 않고 화면에 나타남.
-
Vertex Buffer Object(VBO, 정점 버퍼 객체): GPU 메모리를 할당하고 정점 데이터를 저장하여 그래픽 카드가 사용할 수 있게 하는 버퍼 객체.
-
Vertex Array Object(VAO, 정점 배열 객체): 버퍼와 정점 속성 상태 정보를 저장하는 객체.
-
Element Buffer Object(EBO, 요소 버퍼 객체): 인덱스 기반 렌더링을 위해 GPU에 인덱스를 저장하는 버퍼 객체.
-
Uniform(유니폼): GLSL 변수 중 하나로, 전역 변수이며 한 번만 설정하면 셰이더 프로그램 내 모든 셰이더에서 접근 가능.
-
Texture(텍스처): 셰이더에서 사용되는 특별한 이미지로, 보통 객체에 감싸 사용하여 디테일이 풍부한 객체처럼 보이게 함.
-
Texture Wrapping(텍스처 래핑): 텍스처 좌표가 (0, 1) 범위를 벗어날 때 OpenGL이 텍스처를 샘플링하는 방식을 정의.
-
Texture Filtering(텍스처 필터링): 텍스처 확대 시 여러 텍셀(텍스처 픽셀) 중 어떤 것을 선택할지 OpenGL이 결정하는 방식.
-
Mipmaps(밉맵): 텍스처의 작은 버전을 저장해 두고, 시청자와의 거리 기반으로 적절한 크기의 버전을 선택.
-
stb_image: 이미지 로딩 라이브러리.
-
Texture Units(텍스처 유닛): 하나의 셰이더 프로그램에서 여러 텍스처를 사용할 수 있게 해주며, 각각 다른 텍스처 유닛에 바인딩.
-
Vector(벡터): 방향과/또는 위치를 정의하는 수학적 개체.
-
Matrix(행렬): 유용한 변환 속성을 가진 수학적 표현의 직사각형 배열.
-
GLM: OpenGL에 최적화된 수학 라이브러리.
-
Local Space(로컬 공간): 객체가 처음 시작하는 공간. 객체 원점을 기준으로 한 좌표.
-
World Space(월드 공간): 전역 원점을 기준으로 한 모든 좌표.
-
View Space(뷰 공간): 카메라 시점에서 본 모든 좌표.
-
Clip Space(클립 공간): 카메라 시점에서 투영이 적용된 모든 좌표. 정점 셰이더의 출력 좌표가 이 공간에 위치하며, OpenGL이 나머지 작업(클리핑/원근 나누기)을 처리.
-
Screen Space(스크린 공간): 화면에서 본 모든 좌표. 좌표 범위는 0에서 화면 너비/높이까지.
-
LookAt: 주어진 위치에서 목표를 바라보도록 좌표계를 회전·이동시키는 특수한 뷰 행렬.
-
Euler Angles(오일러 각): Yaw(요), Pitch(피치), Roll(롤)로 정의되며, 이 세 값으로 3D 방향 벡터를 생성 가능.