OpenGL/공부

[OpenGL] Textures (3) - Wrapping

ciel45 2024. 6. 12. 10:43

텍스쳐의 좌표는 앞선 포스팅에서 설명한 바와 같이 (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);