๐ ๋ฃจํ ํจํด ๋ง๋ค๊ธฐ
float result = 0;
result = length(pos-uv)<size; // draw circle
return(result);
float result = 0;
for (int i = 0; i < nSides; i++)
{
float angle = (i/ nSides) * 2 * 3.14;
float2 pos = center+radius * float2(cos(angle), sin(angle));
result + = length(pos-uv) <size; // draw circle
}
return(result);
result +=lenght(pos-uv) <size; ๋ก ๊ทธ๋ฆฌ๋ ์์ ์๋ค์ ๊ฐ๊ฐ ์ค์ฌ์ (center)๊ณผ ๋ฐ์ง๋ฆ(radius)๋ฅผ ๋ํ ์์น(position)์ float๋๊ณ cos(๊ฐ๋)์ sin(๊ฐ๋)๋ฅผ ๊ณฑํด ์๋์ ๊ฐ์ ์์ ๊ทธ๋ฆด ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
์์ ๋๋ ์ ํด๋น๋๋ ํ ์ ์ x,y ์ขํ๋ฅผ ๊ตฌํ ๋,
โญ cos์ ํ์ฉํ์ฌ x๊ฐ์ ๊ตฌํ๊ธฐ
cos(30๋) = 100 / x √3/2 = 100 / x
x = 200 / √3
โญ y๊ฐ์ sin์ ํ์ฉํ์ฌ ๊ตฌํ๊ธฐ
sin(30๋) = 100 / y 1/2 = 100 / y
y = 50
๐ ๊ฐ๋ ๋ณ์๋ฅผ ๊ตฌํ๋ ์์ ๋ํ ๋จ๊ณ ๋ณ ๋ถ์
float angle = (i/ nSides) * 2 * 3.14;
- ์์ ๊ฐ๋ : ์์ 360๋ ๋๋ 2π ๋ผ๋์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ฌ๊ธฐ์ π์ ๊ทผ์ฌ๊ฐ์ผ๋ก 3.14๋ฅผ ์ฌ์ฉํ๋ค.
- ๊ฐ ์ ์ ๋ถํฌ : ์์ ๊ทธ๋ฆฌ๊ธฐ ์ํด ์์ฃผ(์์ ๋๋ ) ์์ ์ ๋ค์ ์ผ์ ํ ๊ฐ๊ฒฉ์ผ๋ก ๋ฐฐ์นํด์ผ ํ๋ค. ์ด ์ ๋ค์ ์ค์ฌ์์ ๋์ผํ ๊ฐ๋๋งํผ ๋จ์ด์ ธ์ผ ํ๋ค.
- ๊ฐ ์ ์ ๊ฐ๋ ๊ณ์ฐ : nSides๋ ์์ ๊ตฌ์ฑํ๋ ๋ค๊ฐํ์ ๋ณ ๊ฐ์, ์ฆ ์ ์ ๊ฐ์์ด๋ค. ๊ฐ ์ ์ฌ์ด์ ๊ฐ๋ ๊ฐ๊ฒฉ์ ์ ์ฒด ์์ ๊ฐ๋ 2π๋ฅผ nSides๋ก ๋๋ ๊ฐ์ด๋ค. ๊ฐ ์ ์ ๊ฐ๋๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด์๋ i๋ฒ์งธ ์ ์ด ์์ ๋ช ๋ฒ์งธ ์์น์ ์๋ ์ง๋ฅผ ์์์ผ ํ๋ค. ์ฌ๊ธฐ์ i/nSides๋ ์ ์ฒด ์์ฃผ๋ฅผ ๋ช ๋ฑ๋ถ์ผ๋ก ๋๋ ๊ฒ์ธ์ง ๋ํ๋ธ๋ค. ์ด๋ฅผ 2π ๊ณฑํ๋ฉด ํด๋น ์ ์ ๊ฐ๋๊ฐ ๋์จ๋ค.
ex) nSides๊ฐ 4์ธ ๊ฒฝ์ฐ,
(๋ผ๋์ ๊ฐ์ ๋(degree) ๋จ์๋ก ๋ณํํ๋ ค๋ฉด ๋ผ๋์ ๊ฐ์ 180/π ํ๋ค.)
nSides๊ฐ 5์ธ ๊ฒฝ์ฐ, nSides๊ฐ 5์ธ ๊ฒฝ์ฐ์๋ 72๋ ๊ฐ๊ฒฉ.. (5/360 =72)
๐ Ref.
๋ฐ์ํ
'HLSL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HLSL ๋ฐ์ดํฐ ํ์ Struct (0) | 2024.12.12 |
---|---|
์ปค์คํ ๋ ธ๋๋ก ํฝ์ ์ดํํธ (๋ ธ์ด์ฆ ํจํด) ๋ง๋ค๊ธฐ (0) | 2024.12.12 |
์ ๊ทธ๋ฆฌ๊ธฐ + ํ์ผ๋ง (0) | 2024.10.28 |