나만의 공부 노트
Texture 본문
TEXTURE WRAPPING
- [0, 1] 범위를 벗어난 텍스처 좌표값을 처리하는 옵션

TEXTURE FILTERING
- Filtering option
- 텍스처로 사용할 이미지의 크기가 화면보다 크거나 작을 경우 처리하는 옵션
- GL_NEAREST: 텍스처 좌표값에 가장 가까운 픽셀값을 사용
- GL_LINEAR: 텍스처 좌표값 주변 4개의 픽셀값을 보간하여 사용
- GL_NEAREST

glGenTextures(1, &m_texture);
glBindTexture(GL_TEXTURE_2D, m_texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->GetWidth(), image->GetHeight(),
0, GL_RGB, GL_UNSIGNED_BYTE, image->GetData());
- GL_TEXTURE_MIN_FILTER : 이미지를 축소할 때
- GL_TEXTURE_MAG_FILTER : 이미지를 확대할 때
- GL_TEXTURE_WRAP_S : x
- GL_TEXTURE_WRAP_T : y
- void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * data);
- level : 밉맵
- GLint internalformat, GLsizei width, GLsizei height : GPU 상의 이미지 메모리
- border : GPU 상의 이미지 외곽 경계
- GLenum format, GLenum type, const void * data : CPU 상의 이미지 메모
- 텍스처의 크기
- 가로/세로의 크기가 2의 지수 형태일 때 GPU가 가장 효율적으로 처리할 수 있다
- NPOT (Non-Power-Of-Two) texture
- 2의 지수 크기가 아닌 텍스처는 GPU의 스펙에 따라 지원을 안하는 경우도 있다
- Mipmap
- 화면 픽셀이 여러 텍스처 픽셀을 포함하게 될 경우를 위해서 작은 사이즈의 이미지를 미리 준비하는 기법

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glGenerateMipmap(GL_TEXTURE_2D);
- GL_NEAREST_MIPMAP_NEAREST: 적합한 레벨의 텍스처를 선택한 뒤 nearest neighbor 픽셀을 선택한다
- GL_LINEAR_MIPMAP_LINEAR: 적합한 두 레벨의 텍스처에서 linear filtering된 값을 다시 linear interpolation한다 (trilinear interpolation)
Multiple Texture
- 한 쉐이더에서 동시에 쓸 수 있는 텍스쳐 갯수는 32개
-
- glActiveTexture(textureSlot) 함수로 현재 다루고자 하는 텍스처 슬롯을 선택
- glBindTexture(textureType, textureId) 함수로 현재 설정중인 텍스처 슬롯에 우리의 텍스처 오브젝트를 바인딩
- glGetUniformLocation() 함수로 shader 내의 sampler2D uniform 핸들을 얻어옴
- glUniform1i() 함수로 sampler2D uniform에 텍스처 슬롯 인덱스를 입력
'Graphics > OpenGL' 카테고리의 다른 글
| GLSL (0) | 2023.12.28 |
|---|---|
| 삼각형 그리기 (0) | 2023.12.27 |
| 초기 세팅과 관련해서 공부한 내용 (1) | 2023.12.26 |