Skip to content

Sphere_uv

Hyoj-Kim edited this page Apr 13, 2022 · 5 revisions

Texture Coordinate for Sphere (구면좌표계)

Screen Shot 2022-04-13 at 5 47 28 PM

임의의 한 점 P를 (x, y, z)로 표현하는 것을 직교좌표계라고 하고, (r, 𝞱, φ)로 표현하는 것을 구면좌표계라고 한다.

변수 설명
r 구의 반지름
𝞱 y축과 점 P가 이루는 각
φ zx평면에 사영된 점과 z축이 이루는 각

이 구면좌표계를 이용하면, 2차원 이미지를 어떤식으로 매핑할 수 있는지 계산할 수 있다.

[0, 1]까지로 표현되는 uv map으로 구를 포장해준다고 생각해보자.


가로축에 해당하는 u의 경우 φ를 따라 360°를 완전히 감싸주게 되고,

세로축에 해당하는 v의 경우 𝞱를 따라 위아래 180°를 감싸주게 된다.

이를 아래 식 (1)과 같이 표현할 수 있다.

Screen Shot 2022-04-06 at 5 20 55 PM



직교좌표계와 구면좌표계의 변환식(2)~(4)을 이용해서 φ와 𝞱를 x, y, z로 나타내보자.

이 때, unit vector를 이용할 예정이라 반지름 r = 1이 되면서 생략했다.

Screen Shot 2022-04-06 at 5 21 07 PM



u를 계산하기 위한 φ 구하기 위해 식 (2)와 (4)를 보면, 똑같이 있는 sin𝞱를 소거하고 싶어진다.

동시에, cos과 sin의 분수 조합이면 tan를 만들 수 있으니까 z에 -x를 나눠주도록 하자.

Screen Shot 2022-04-06 at 5 21 26 PM



<math.h>에서 제공하는 tan의 역함수로 atan(), atan2()를 사용할 수 있는데,

이 때 atan()의 결과 범위는 [-π/2, π/2]이고 atan2()의 결과 범위는 [-π, π]이다. (참고)

u가 [0, 1]의 범위를 가지도록 만들기 위해서는 φ의 범위도 [0, 2π]가 되도록 식을 수정해주어야 한다.

범위를 바꿔주는 방법은 다양하지만, 여기서는 TheNextWeek에서 소개한 방법을 이용했다.

Screen Shot 2022-04-06 at 5 21 36 PM



식 (6)에 (7)을 적용해주면, [0, 2π] 범위의 결과가 나오는 φ를 계산할 수 있게 된다.

Screen Shot 2022-04-06 at 5 21 43 PM



𝞱는 식 (3)에서 cos의 역함수로 아주 쉽게 구할 수 있다. 범위도 이미 [0, π]라서 보정할 필요도 없다!

Screen Shot 2022-04-06 at 5 21 53 PM



이렇게 구한 값들을 식 (1)에 넣어주면 3차원 구를 2차원 uv map으로 표현할 수 있게 된다.

Clone this wiki locally