Sphere_uv - miniRT-jiphyeonjeon/MiniRT GitHub Wiki

์์์ ํ ์ P๋ฅผ (x, y, z)๋ก ํํํ๋ ๊ฒ์ ์ง๊ต์ขํ๊ณ๋ผ๊ณ ํ๊ณ , (r, ๐ฑ, ฯ)๋ก ํํํ๋ ๊ฒ์ ๊ตฌ๋ฉด์ขํ๊ณ๋ผ๊ณ ํ๋ค.
๋ณ์ | ์ค๋ช |
---|---|
r | ๊ตฌ์ ๋ฐ์ง๋ฆ |
๐ฑ | y์ถ๊ณผ ์ P๊ฐ ์ด๋ฃจ๋ ๊ฐ |
ฯ | zxํ๋ฉด์ ์ฌ์๋ ์ ๊ณผ z์ถ์ด ์ด๋ฃจ๋ ๊ฐ |
์ด ๊ตฌ๋ฉด์ขํ๊ณ๋ฅผ ์ด์ฉํ๋ฉด, 2์ฐจ์ ์ด๋ฏธ์ง๋ฅผ ์ด๋ค์์ผ๋ก ๋งคํํ ์ ์๋์ง ๊ณ์ฐํ ์ ์๋ค.
[0, 1]๊น์ง๋ก ํํ๋๋ uv map์ผ๋ก ๊ตฌ๋ฅผ ํฌ์ฅํด์ค๋ค๊ณ ์๊ฐํด๋ณด์.
๊ฐ๋ก์ถ์ ํด๋นํ๋ u์ ๊ฒฝ์ฐ ฯ๋ฅผ ๋ฐ๋ผ 360ยฐ๋ฅผ ์์ ํ ๊ฐ์ธ์ฃผ๊ฒ ๋๊ณ ,
์ธ๋ก์ถ์ ํด๋นํ๋ v์ ๊ฒฝ์ฐ ๐ฑ๋ฅผ ๋ฐ๋ผ ์์๋ 180ยฐ๋ฅผ ๊ฐ์ธ์ฃผ๊ฒ ๋๋ค.
์ด๋ฅผ ์๋ ์ (1)๊ณผ ๊ฐ์ด ํํํ ์ ์๋ค.

์ง๊ต์ขํ๊ณ์ ๊ตฌ๋ฉด์ขํ๊ณ์ ๋ณํ์(2)~(4)์ ์ด์ฉํด์ ฯ์ ๐ฑ๋ฅผ x, y, z๋ก ๋ํ๋ด๋ณด์.
์ด ๋, unit vector๋ฅผ ์ด์ฉํ ์์ ์ด๋ผ ๋ฐ์ง๋ฆ r = 1์ด ๋๋ฉด์ ์๋ตํ๋ค.

u๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํ ฯ ๊ตฌํ๊ธฐ ์ํด ์ (2)์ (4)๋ฅผ ๋ณด๋ฉด, ๋๊ฐ์ด ์๋ sin๐ฑ๋ฅผ ์๊ฑฐํ๊ณ ์ถ์ด์ง๋ค.
๋์์, cos๊ณผ sin์ ๋ถ์ ์กฐํฉ์ด๋ฉด tan๋ฅผ ๋ง๋ค ์ ์์ผ๋๊น z์ -x๋ฅผ ๋๋ ์ฃผ๋๋ก ํ์.

<math.h>์์ ์ ๊ณตํ๋ tan์ ์ญํจ์๋ก atan(), atan2()
๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ,
์ด ๋ atan()์ ๊ฒฐ๊ณผ ๋ฒ์๋ [-ฯ/2, ฯ/2]์ด๊ณ atan2()์ ๊ฒฐ๊ณผ ๋ฒ์๋ [-ฯ, ฯ]์ด๋ค. (์ฐธ๊ณ )
u๊ฐ [0, 1]์ ๋ฒ์๋ฅผ ๊ฐ์ง๋๋ก ๋ง๋ค๊ธฐ ์ํด์๋ ฯ์ ๋ฒ์๋ [0, 2ฯ]๊ฐ ๋๋๋ก ์์ ์์ ํด์ฃผ์ด์ผ ํ๋ค.
๋ฒ์๋ฅผ ๋ฐ๊ฟ์ฃผ๋ ๋ฐฉ๋ฒ์ ๋ค์ํ์ง๋ง, ์ฌ๊ธฐ์๋ TheNextWeek์์ ์๊ฐํ ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ค.

์ (6)์ (7)์ ์ ์ฉํด์ฃผ๋ฉด, [0, 2ฯ] ๋ฒ์์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ฯ๋ฅผ ๊ณ์ฐํ ์ ์๊ฒ ๋๋ค.

๐ฑ๋ ์ (3)์์ cos์ ์ญํจ์๋ก ์์ฃผ ์ฝ๊ฒ ๊ตฌํ ์ ์๋ค. ๋ฒ์๋ ์ด๋ฏธ [0, ฯ]๋ผ์ ๋ณด์ ํ ํ์๋ ์๋ค!

์ด๋ ๊ฒ ๊ตฌํ ๊ฐ๋ค์ ์ (1)์ ๋ฃ์ด์ฃผ๋ฉด 3์ฐจ์ ๊ตฌ๋ฅผ 2์ฐจ์ uv map์ผ๋ก ํํํ ์ ์๊ฒ ๋๋ค.