객체의 표면에 입히는 이미지로, 디테일을 추가하기 위해 사용된다.
Texture : 색상 외에도 법선 벡터, 높이, 금속성, 거칠기 등 렌더링에 필요한 모든 종류의 데이터를 저장할 수 있는 2D 데이터 배열.
Texel : 텍스쳐 이미지를 구성하는 최소 단위
텍스쳐 좌표 : 텍스쳐는 실제 해상도와 상관없이 항상 가로(U) 0.0 ~ 1.0, 세로(V) 0.0 ~ 1.0 사이의 정규화된 좌표계를 사용함.
BMP, JPG, PNG 등 수많은 이미지 포맷을 직접 처리하는 것은 매우 복잡함.
따라서, SOIL, stb_image 와 같은 이미지 로더 라이브러리를 사용함.
unsigned char* data = stbi_load("image.jpg", &width, &height, &bitDepth, 0);
stbi_load() : 이미지 파일 경로를 받아 너비, 높이, 채널 정보와 함께 픽셀 데이터가 담긴 unsigned char 포인터를 리턴
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
VBO / VAO 와 유사하게 GPU 메모리에 텍스쳐 데이터를 저장할 공간의 ID를 생성한 뒤 이를 작업할 '타겟' 으로 바인딩
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
3D 공간에서 객체는 카메라에 가까워지거나 멀어질 때, 하나의 픽셀이 텍스쳐의 어느 부분을 샘플링해야 할지 결정해야 함.
샘플링할 좌표에서 가장 가까운 텍셀 하나를 사용함.
텍스쳐가 확대될 때 각 텍셀이 네모난 블록처럼 보임
샘플링할 좌표를 둘러싼 주변 4개의 텍셀 색상을 가져와, 좌표와의 거리를 기반으로 가중 평균을 계산하여 부드러운 색상을 만들어 냄.
텍셀 간의 경계가 부드럽게 뭉개져 자연스러운 모습을 보임
GL_NEAREST |
GL_LINEAR |
객체가 매우 멀리 있을 때, 고해상도 텍스쳐의 수많은 텍셀들이 단 몇개의 픽셀안에 압축되어 표현되어 GPU가 불필요하게 많은 텍스쳐 데이터들을 읽게 되어 성능 저하가 유발 됨.
Mipmaps : 원본 텍스쳐외에 미리 계산된 저해상도 버전의 텍스쳐들을 만들어 두어 이를 해결
렌더링 시, OpenGL은 객체와 카메라의 거리를 고려하여 가장 적절한 크기의 밉맵 레벨을 선택해 샘플링함.
텍스쳐 좌표가 1.0 을 넘거나 0.0 보다 작아질 때 어떻게 처리할지 정의.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
pname : 텍스쳐 좌표의 각 축에 대한 래핑 방식 설정
param : 래핑 설정에 대한 값

Texture Unit : GPU가 동시에 접근할 수 있는 텍스쳐 슬롯
Sampler : GLSL 셰이더 코드 안에 선언하며, 특정 텍스쳐 유닛을 가리키는 역할을 수행
