어떤 물체의 표면을 효율적으로 표현하는 법은 이미지를 물체의 표면에 입히는 것이다.
그것을 Texturing이라고 한다. Texturing을 하기 위해서 Texture 좌표가 이미지에서 어느 위치인지 알아야 한다.

이미지 좌표계는 DirectX에서 왼쪽 위가 원점이고 오른쪽,아래쪽으로 갈수록 크기가 커지는 UV좌표계이다.
왼쪽 그림에서 점 p 가 가리키는 곳을 이미지의 uv좌표에서 가져와야 하는데 이것을 샘플링이라고 한다.
https://cppking.tistory.com/240
무게 중심 좌표계 링크
이미지에서 p의 좌표를 구하는 법은 무게 중심 좌표계를 통해 Texture에서 p의 좌표를 구해야 한다.
그 후는 샘플링의 종류에 따라 나뉜다.

샘플링 종류는 포인트 샘플링과 리니어 샘플링으로 나뉜다. 포인트 샘플링은 한 점을 기준으로 색을 가져오기 때문에
색이 명확하게 구분되어 있고 리니어 샘플링은 Interpolation을 이용하기 때문에 그라데이션처럼 보여진다.

Texture의 정점들의 좌표값을 보면 x크기가 0~1이고 y크기가 0~1인 좌표인데 이것을 이미지의 좌표계로 변환하기 위해
맨 왼쪽 픽셀의 중간 점의 좌표를 (0,0)이라고 할때 전체 좌표 범위를 x는 -0.5에서 width + 0.5 사이, y를 -0.5에서 height + 0.5 사이라고 할 수 있다. 그래서 uv좌표에서 x에 width, y에 height을 곱한 뒤 0.5씩 빼주면 이미지의 좌표로 변환할 수 있다. 포인트 샘플링은 픽셀의 중간값을 기준으로 하기 때문에 좌표에 반올림을 해주면 중간점의 좌표를 구할 수 있다.
리니어 샘플링은 조금 더 복잡한데 일차원으로 Interpolation을 두번 해야 한다. 좌표가 네 점 사이에 있을 때 (왼쪽 그림)
위쪽 두 점을 보간해서 구한 점의 좌표와 아래쪽 두 점을 보간해서 구한 좌표를 또 y축으로 보간한다. 기준을 잡기 위해 좌표를 내림해서 c00(왼쪽 위)점을 구하고 나머지 좌표를 구해 보간하는 연산을 한다. 예시로 왼쪽 그림에서 a의 좌표 계산 식은 (1-dx)*c00 + dx*c10 이다. 정점의 반대편 거리를 곱하는 이유는 dx의 값이 커질 수록 c10에 가까워지고 c10에 가까워질수록 c10의 계수는 커져야 하기 때문이다.
'그래픽스' 카테고리의 다른 글
| [그래픽스] 투명한 물체에서 빛의 굴절 (0) | 2023.05.18 |
|---|---|
| [그래픽스] 슈퍼 샘플링 (0) | 2023.05.18 |
| [그래픽스] 무게중심 좌표계 (0) | 2023.05.16 |
| [그래픽스] 직선과 삼각형의 충돌 (0) | 2023.05.15 |
| [그래픽스] 선과 구의 충돌 (0) | 2023.05.11 |