텍스쳐의 좌표는 앞선 포스팅에서 설명한 바와 같이 (0, 0) ~ (1, 1) 사이의 값을 가진다.
그런데 프로그래머가 고의로든, 실수로든 0 미만 / 1 초과의 좌표값을 할당했다면, 그 부분은 어떻게 처리해줘야 할까?
이때의 처리 방식을 정해주는 것이 Texture Wrapping이다.
OpenGL이 제공해주는 옵션들은 다음과 같다.
- GL_REPEAT
- 텍스쳐를 여러개 이어붙인 것처럼 처리한다.
- 좌표로 (1.5, 1.5)를 주었다면, 3x3 이미지 중 우측 상단의 이미지의 가운데의 텍셀을 떼올 것이다.
- 횡스크롤 게임의 배경 등에 사용되는 방식이다. 처음과 끝을 자연스럽게 이어지도록 해서 반복시키면 가로로 긴 맵이어도 배경 리소스가 많이 필요하지 않기 때문.
- GL_MIRRORED_REPEAT
- GL_REPEAT랑 비슷하지만, 이어붙일 때 이미지를 반전시켜 붙인다.
- 상황에 따라 GL_REPEAT보다 더 자연스러울 수 있다.
- GL_CLAMP_TO_EDGE
- 좌표값을 [0, 1] 사이의 값으로 clamp시킨다.
- 좌표로 (0.5, 1.5)를 주었다면, 1.5가 1로 clamp되어 (0.5, 1)이 된다. (0.5, 1.7), (0.5, 1.8), ... 도 마찬가지이므로, 텍스쳐가 상단 예시처럼 경계를 기점으로 쭉 늘려진것 처럼 보이게 된다.
- GL_CLAMP_TO_BORDER
- 임의의 컬러를 정의하고, 범위를 벗어난 좌표는 해당 컬러로 채운다.
이 중 default behavior는 GL_REPEAT이라고 할 수 있으며, 코드로는 다음과 같은 형태로 사용한다.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
'OpenGL > 공부' 카테고리의 다른 글
[OpenGL] Textures (5) - 적용 (VAO 수정) (6) | 2024.06.13 |
---|---|
[OpenGL] Textures (4) - 로드(stb_image), 생성, 바인딩(Texture Unit) (1) | 2024.06.13 |
[OpenGL] Textures (2) - Mipmap (0) | 2024.06.06 |
[OpenGL] Textures (1) - 개요, Texture Filtering (Nearest, Linear) (0) | 2024.06.06 |
[OpenGL] 카메라 구현, 키보드/마우스를 통한 조작 (0) | 2024.06.01 |