Graphics Programming

텍스처 좌표 래핑(wrapping)의 함정 본문

Season 1/OpenGL

텍스처 좌표 래핑(wrapping)의 함정

minseoklee 2017. 9. 30. 16:51

구 또는 원통형 물체에 양 끝이 이어지는 텍스처를 입힐 때, 샘플링의 래핑 모드를 GL_REPEAT로 하는 게 자연스럽다. 이러면 버텍스마다 uv 좌표가 0.0 ~ 1.0 사이가 아니라 계산 상의 문제로 0.2 ~ 1.2이여도 텍스처가 좀 옆으로 회전할 뿐 샘플링이 제대로 될...까?




애초에 버텍스의 uv 좌표가 이런 상태로 버텍스 셰이더 -> ... -> 프래그먼트 셰이더를 거치면 u = 1.2와 u = 0.4인 버텍스 사이의 픽셀들에서는 u가 선형 보간되어 1.2 -> 0.4로 변한다. 그러면 텍스처의 왼쪽 끝과 오른쪽 끝이 자연스레 이어지는 것이 아니라 중간 부분이 뒤집혀서 출력된다.


간단한 해결책은 uv를 프래그먼트 셰이더에서 직접 계산하는 것이다. 이러면 연산량이 더 많아지지만 내가 만들고 있는 구 매핑에서는 이런 문제가 발생하지 않도록 버텍스 셰이더에 uv를 넣는 방법을 찾지 못했다. u가 0.2 ~ 1.2라는 걸 알면 전체적으로 0.2를 뺀 다음 VRAM에 업로드하면 되는데 u의 범위의 길이가 1인 것만 보장될 뿐 u의 최솟값과 최댓값이 매번 달라져서... -_-

Comments