๋ฌผ๋ฆฌ ์์ง ๋ง๋๋ ๋ฐฉ๋ฒ ํผ์์ ์ฐพ์๋ณด๋ฉฐ ํ๋๋ฐ, ๋ค๋ฅธ ์ฌ๋ํํ ๋ ๋งํด์ฃผ๊ณ ์ถ์ด์ ๊ธ ์
๊ทผ๋ฐ ๊ฒ์ ์์ง ์ฌ์ฉํ๋ฉด ์ ํ์ ์๋ ๋ด์ฉ์ธ๊ฐ? ๊ฒ์ ์์ง ์จ ๋ณด์ง ์์์ ๋ชจ๋ฅด๊ฒ ๋๋ฐ ์์ฒด์ ์ผ๋ก ๋ฌผ๋ฆฌ์์ง ์๊ฒ ์ง?
๊ทธ๋๋ ์ผ๋จ ์จ ๋ด. ๊ฐ๋จํ 2d ๋ฌผ๋ฆฌ์์ง ๊ตฌํ์ ๋ํด ๊ธ์ ์จ ๋ณด๊ฒ ์.
๋จผ์ ๋ด๊ฐ ์ฐธ๊ณ ํ ๋งํฌ๋ค
How to create custom physics engine : ๋งํฌ
-> ์ค๋ช ์ด ์ ๋์ด ์๊ธด ํ๋ฐ ๋๋ฌธ๋๋ฌธ ํ๋ฆฐ ๊ณณ์ด ์๊ณ , warmstarting ์ค๋ช ์ด ์๊ณ accumulated impulse ์ค๋ช ๋ ์์
Box 2d : ๋งํฌ
-> box 2d ๋ฌผ๋ฆฌ์์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ppt ๋ชจ์ ๋งํฌ์. ์ง์ ์์ค ์ฝ๋ ๋ณผ ์ ์์ด์ ์ข๊ณ ppt ์ค๋ช ๋ ์ ๋์ด ์์
Allen Chou game physics series : ๋งํฌ
-> ์ฌ๊ธฐ๋ ์ค๋ช ์์ธํ๊ฒ ๋์ ์๋ ๊ฑฐ ๊ฐ๊ธด ํ๋ฐ ๊ฑฐ์ ์์ฑ ๋จ๊ณ์์ ๋ฐ๊ฒฌํ ๊ฑฐ๋ผ์ ์์ธํ๊ฒ ๋ณด์ง ์์์.
์ฌ์ค ์ด ๊ธ ๋ณผ ํ์ ์์ด ์ ๋งํฌ๋ง ๋ด๋ ๋จ
========================================================
์ผ๋จ ๋จผ์ ๊ฐ๋จํ๊ฒ ๋ฌผ๋ฆฌ ๋ฒ์น ๋ถํฐ ์์ํ๋ฉด
์๋ง ๋ค๋ค ์๊ณ ์๊ฒ ์ง๋ง ๊ทธ๋๋ ์จ ๋ด.ย ์์๊ฐ ์ค์ํจ
ํ์ผ๋ก ๊ฐ์๋ ๊ตฌํ๊ณ , ๊ทธ ๊ฐ์๋๋ก ์๋ ๊ตฌํ๊ณ , ๊ทธ ์๋๋ก ์์น ๊ตฌํด์ผ ๋จ,
์ด๊ฑธ semi-implicit euler method ๋ผ๊ณ ํ๋ ๊ฑฐ ๊ฐ์.
์ด๊ฑฐ๋ณด๋ค ์ ํํ RK4 ๋ผ๋ ๋ฐฉ์๋ ์์ง๋ง,ย ๋ณต์กํ๊ณ ย semi-implicit euler method ๋ก๋ ์ถฉ๋ถํ ์ ํํด์ ์ ์ฐ๋ ๊ฒ ๊ฐ์.
๋ฌผ์ฒด์ ํ์ ๋ ๋ฌผ์ฒด์ ์ด๋์ด๋ ๋๊ฐ์ด ์๊ฐํ๋ฉด ๋จ,
๋ฌผ์ฒด์ ์์น x์๋ฆฌ์ ๋ฌผ์ฒด๊ฐ ํ์ ํ ๊ฐ๋ย ฮธ๋ฅผ ๋ฃ๊ณ , ๋ฌผ์ฒด์ ์๋ v๋์ ๋ฌผ์ฒด์ ๊ฐ์๋ย ฯ๋ฃ๊ณ , ๋ฌผ์ฒด์ ๊ฐ์๋ a ๋์ ๊ฐ๊ฐ์๋ย ฮฑ๋ฃ๊ณ , ๋ฌผ์ฒด์ ์ง๋ m ๋์ ์ ๋ฌผ์ฒด์ ํ์ ๊ด์ฑ I ๋ฃ์ผ๋ฉด ๋จ.
์ฆ,ย v=v0+a*t ๋์ ย ฯ=ฯ0+ฮฑ*tย ํ๊ณ
x=x0+v*t ๋์ ย ฮธ=ฮธ0+ฯ*tย ํ๋ฉด ๋จ.
๋ฌธ์ ๋ F๋์ ๋ญ ๋ฃ๋๋ ๊ฑด๋ฐ, ๋ง์ฐฌ๊ฐ์ง๋ก ์๊ณ ์๊ฒ ์ง๋ง ํ ํฌ tย ๊ฐ์ ๋ฃ์ผ๋ฉด ๋จ.ย t๋ ๋ฌผ์ฒด๋ฅผ ํ์ ์ํค๋ ํ์ธ๋ฐ.
์ ์ฌ์ง์์
ํ์ ์ค์ฌ์ ๋นจ๊ฐ ์ ์ด๋ผ ํ๊ณ , r๋งํผ ๋จ์ด์ง ๊ณณ์์ F๋ก ํ์ ์ฃผ๋ฉด, ์์ ๊ฐ์ด ๋๋๋ฐ
ํ ํฌย t ๊ฐ์ ํฌ๊ธฐ๋ย r ์ย Fโฅ ๊ฐ์ ๊ณฑํ๋ฉด ๋จ. ์ฌ์ค ๋น์ฐํ๋ค๊ณ ๋ณผ ์ ์๋๊ฒ, F|| ๋ฐฉํฅ์ผ๋ก ์๋ฌด๋ฆฌ ์ก์ ๋น๊ฒจ๋ ๋นจ๊ฐ ์ ์ ๊ธฐ์ค์ผ๋ก ํ์ ํ ์๊ฐ ์์
๊ธฐํธ๋ก ํ๊ธฐํ๋ฉดย t=rรF ๊ฐ ๋จ.
๋ค๋ค ์๊ณ ์๊ฒ ์ง๋ง ๋ฒกํฐ๋ฅผ ์ธ์ ํ๋ฉด
์์ ๊ฐ์ ๋ฐฉํฅ์ด ๋จ.
๋ฐ๋ผ์ ์ด๋ก์ r๋ฒกํฐ์ ๋ณด๋ผ์ F๋ฒกํฐ๋ฅผ ์ธ์ ํด์ ๋์จย ????๋ ํ๋ฉด์์ ํ์ด๋์ค๋ ๋ฐฉํฅ์ด ๋๋ค.
์ฐธ๊ณ ๋ก a=<a1,a2,a3> ์ด๊ณ b=<b1,b2,b3> ์ผ ๋,
aรb=<a2*b3-b2*a3,-a1*b3+a3*b1,a1*b2-a2*b1> ์ด ๋๋ ๊ณต์์ด ์๋ค.
๋ฒกํฐ์ ๋ด์ ๋ ์๊ณ ์์ด์ผ ํ๋๋ฐ, ๋ค๋ค ์๋ค์ํผ
์์ ์ฌ์ง์์ย r๊ณผ F๋ฅผ ๋ด์ ํ๋ค๋ ๊ฒ์ rยทF ๋ก ํํํ๊ณ
๊ทธ ๊ฐ์ ํฌ๊ธฐ๋ย r *ย F|| ์ด๋ค.
a=<a1,a2,a3> ์ด๊ณ b=<b1,b2,b3> ์ผ ๋,
aยทb=<a1*b1,a2*b2,a3*b3> ์ด ๋๋ ๊ณต์์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋ฒกํฐ a์ b๊ฐ ๊ฐ์ ๋ฐฉํฅ์ด๋ฉด ๋ด์ ๊ฐ์ ์์์ด๊ณ ๋ค๋ฅธ ๋ฐฉํฅ์ด๋ฉด ๋ด์ ๊ฐ์ด ์์๊ฐ ๋๋ค.
========================================================
๋จผ์ ๋ฌผ์ฒด๋ถํฐ ์ ์ํ์. ๋ฌผ์ฒด๋ฅผ ์ด๋ป๊ฒ ์ ์ํ๋๋ ์ฝ๋ฉ ํ๋ ์ฌ๋ ๋ง์์ด๊ฒ ์ง๋ง ๋์ ๊ฒฝ์ฐ์๋
object ๊ตฌ์กฐ์ฒด์ ์ง๋ ์ค์ฌ์ ๋ํ ์๋, ๊ฐ์๋, ํ, ๊ฐ๊ฐ์๋, ๊ฐ์๋, ๊ฐ๋, ์ง๋ ๋ฑ์ ๋ฃ์์.ย ๊ณ์ฐ ํ ๋ ์ง๋์ ์ญ์๊ฐ ๋ง์ด ์ด์ฉ๋๋๊น ๋ณดํต ์ง๋์ ์ญ์๋ก ์ ์ฅํจ.
shape์ material ๊ตฌ์กฐ์ฒด๋ ์์ ๊ฐ์ด ํ์
shape ๊ตฌ์กฐ์ฒด์ ์ง๋ ์ค์ฌ์ ๋ํ ๊ฐ ๊ผญ์ง์ ์ ์ขํ, ๋ฌผ์ฒด์ ๋ณ์ ๋ํดย ์์ง์ธ ๋ฒกํฐ(๋ฒ์ ๋ฒกํฐ) ๋ฑ์ ๋ฃ์์
์ง๋ ์ค์ฌ์ ๋ํ ๊ผญ์ง์ ์ ์ขํ(๋นจ๊ฐ์)๊ณผ ๋ฌผ์ฒด์ ๋ณ์ ๋ํด ์์ง์ธ ๋ฒกํฐ(๋ณด๋ผ์)
๋ณด๋ผ์ ๋ฒกํฐ๋ ํธ์์ ํฌ๊ธฐ๋ฅผ 1๋ก ํ๋๊ฒ ์ข์
========================================================
๋ฌผ์ฒด์ ํํ์ ๊ดํด ์ ์ฅ์ ํ์ผ๋ ์ด์ ๋ฌผ์ฒด์ ์ถฉ๋์ ๊ฒ์ถํด์ผ ํจ. ์ด ๊ธ์์๋ GDC 2013 ppt์ ์๋ SAT ๋ฐฉ์์ ์ค๋ช ํ๋ ค๊ณ ํจ. Box2d ppt ์ฌ์ดํธ์ ์์
์ด ๋ถ๋ถ์ด ๊ณ์ฐ ์๊ฐ์ดย ์ข ๊ฑธ๋ฆฌ๋ ๋ณดํต์ ๊ด์ญ ๊ฒ์ฌ๋ฅผ ํ ๋ฒ ํ๊ณ ๊ทธ ๋ค์์ ์ ๋๋ก ์ถฉ๋ ๊ฒ์ฌ๋ฅผ ํจ.
๊ด์ญ ๊ฒ์ฌ๋ฅผ ์๊ฐ์ ์ผ๋ก ํํํด ๋ณด๋ฉด
์์ ์ค๊ฐํ๊ณผ ์ก๊ฐํ์ ์ถฉ๋์ ์ ๋๋ก ๊ฒ์ฌํ๊ธฐ ์ด์ ์, ๊ณ์ฐํ๊ธฐ ์ฌ์ด ์์ญ(ํ๋์ ํ
๋๋ฆฌ)๋ฅผ ๋ฏธ๋ฆฌ ์ก์ ํ์ ๊ทธ ์์ญ์ผ๋ก ์ถฉ๋ ๊ฒ์ฌ๋ฅผ ํ๋ ๊ฑฐ์
์์ ๋ณด๋ฉด ํ๋์ ์ฌ๊ฐํ์ด ๊ฒน์น์ง ์์ผ๋ ๊ตณ์ด ๊ฒ์์ ๋ํ์ด ์ถฉ๋ ํ๋ ์ง ์ ํ๋์ง ํ์ธํ ํ์๊ฐ ์์.
Box2d ์ ๊ฒฝ์ฐ์๋ ์์ฒ๋ผ ์ฌ๊ฐํ์ผ๋ก ์์ญ์ ์ก์๊ณ , ๋ ๊ฑ ๊ท์ฐฎ์์ ๋ํ์ ์ต๋ ๊ธธ์ด๋ฅผ max_distance์ ์ ์ฅํ ํ์ ๋ ๋ํ ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ max_distance์ ํฉ์ ๋น๊ตํ์.
๋ง์ผ ๊ด์ญ ๊ฒ์ฌ์์ ๊ฑธ๋ฆฌ๋ฉด ์ด์ ์ถฉ๋ ๊ฒ์ฌ๋ฅผ ํด์ผ ๋๋๋ฐ,
๋ญ๊ฐ ์ด๊ฒ ์ ๊ฒ ๋ง์์ ๋ณต์กํด ๋ณด์ด์ง๋ง ์ ๋ณด๋๋ก ํ์.
์ง์ฌ๊ฐํ๊ณผ ํํ์ฌ๋ณํ์ด ๋ณด์ด๋ ๊ฒ ์ฒ๋ผ ์ถฉ๋ํ๊ณ ์์
์ด ๋, ํํ์ฌ๋ณํ์ 3๋ฒ ๊ผญ์ง์ ์ด ์ง์ฌ๊ฐํ ๋ด๋ถ๋ก ๋ค์ด์ ์์. ์ด๊ฑธ ์ด๋ป๊ฒ ์ ์ ์๋์ง ๋ณด๋๋ก ํ์.
๋๋ ํํฌ์ ๋ฒกํฐ์ ๊ฐ์ ๋ฒกํฐ๋ฅผย object ๊ตฌ์กฐ์ฒด์ ์ ์ฅํ์์. ๊ทธ๋ฆฌ๊ณ ์ฃผํฉ์๊ณผ ๋นจ๊ฐ์๊ณผ ๋ณด๋ผ์ ๋ฒกํฐ๋ย shape ๊ตฌ์กฐ์ฒด์ ์ ์ฅ ํ์์.
๊ทธ๋ฌ๋ฉด ์ด๋ก์ ๋ฒกํฐ = (๊ฐ์ + ๋นจ๊ฐ์) - (ํํฌ์ + ์ฃผํฉ์) ์ธ ๊ฒ์ ์ฝ๊ฒ ์ ์ ์์
๊ทธ๋ฆฌ๊ณ ์ด๋ก์ ๋ฒกํฐ์ ๋ณด๋ผ์ ๋ฒกํฐ๋ฅผ ๋ด์ ํ์ ๋, ๊ทธ ๊ฐ์ด ์์๊ฐ ๋์ค๋ฉด ๊ทธ ๊ผญ์ง์ ์ ๋ณ์ ๋ด๋ถ์ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ด ๊ฒ๊ณผ ๋์ผํ๊ฒ ์ง์ฌ๊ฐํ์ 2๋ฒ 3๋ฒ 4๋ฒ ๊ผญ์ง์ ๋ ๋๊ฐ์ด ๊ณ์ฐํด์ ์ ๋ถ ์์๊ฐ ๋์ค๋ฉด ์ถฉ๋ํ๋ค๋ ๊ฒ์ ์ ์ ์์.
๊ณ์ฐํ๋ค๊ฐ ํ๋๋ผ๋ ์์ ๋์ค๋ฉด break๋ return ํด์ ๊ฑ ๋นจ๋ฆฌ ๋น ์ ธ๋์ค์
๊ทธ๋ฆฌ๊ณ ์ด๋ก์ ๋ฒกํฐ์ ๋ณด๋ผ์ ๋ฒกํฐ๋ฅผ ๋ด์ ํ๋ฉด (๋ณด๋ผ์ ๋ฒกํฐ์ ํฌ๊ธฐ๋ผ 1์ด๋ผ๋ ๊ฐ์ ํ์)
์์ ์ฌ์ง์์ ๋นจ๊ฐ์ ์ ๋ถ์ ๊ธธ์ด๊ฐ ๋์ฌ ๊ฑฐ์.(์ ํํ ๋งํ์๋ฉด ๋ด์ ๊ฐ์ด ์์์ด๋ฏ๋ก ์ ๋ถ ๊ธธ์ด์ ์์๊ฐ)
๊ทธ๋ฆฌ๊ณ 2๋ฒ ๊ผญ์ง์ ์์๋ ์ฃผํฉ์์ด ๋์ค๊ณ
3๋ฒ ๊ผญ์ง์ ์์๋ ์ด๋ก์, 4๋ฒ ๊ผญ์ง์ ์์๋ ํ๋์ ์ ๋ถ์ด ๋์ฌ๊ฑฐ์.
๋ง์ฝ ๋ ๋ํ์ด ์ถฉ๋ํ์ ๊ฒฝ์ฐ,ย ์ด 4๊ฐ ์ ๋ถ ์ค์์ ๊ธธ์ด๊ฐ ๊ฐ์ฅ ์งง์ ๋์ด ๋นจ๊ฐ์์ด๋๊น, ์ด ๋นจ๊ฐ ์ ๋ถ์ ๊ธธ์ด๋ฅผ ์ ์ฅํ๊ณ 1๋ฒ ๊ผญ์ง์ ์์ ๊ทธ ์ ๋ถ์ด ๋ฐ์ํ๋ค๋ ๊ฑฐ๋ ์ ์ฅํด๋์ผ๋จ
์ด๋ ๊ฒ ๊ฐ์ฅ ์งง์ ์ ๋ถ์ ๊ธธ์ด๋ฅผย minimum penetration depth ๋ผ๊ณ ํจ.
========================================================
๊ทธ ๋ค์์ผ๋ก ํ์ํ ๊ฒ ์ถฉ๊ฒฉ๋๊ณผ ์ด๋๋์ด๋ผ๋ ๊ฐ๋ ์ธ๋ฐ,
๋ ๋ฌผ์ฒด๊ฐ ์ถฉ๋ ํ ๋, ํ์ ๋ฐฉํฅ์ ์ถฉ๋๋ฉด์ ์์ง ๋ฐฉํฅ์.
์ง์ฌ๊ฐํ๊ณผ ํํ์ฌ๋ณํ์ ์์๋ฅผ ๋ค์๋ฉด.
๋จผ์ penetration depth ๊ฐ ๊ฐ์ฅ ์งง์๋ ํ๋์ ๋ณ์ด ์ถฉ๋๋ฉด์ด ๋๋ ๊ฑฐ์.
๊ทธ๋ฆฌ๊ณ ๋นจ๊ฐ์ ํ์ดํ๊ฐ ํํ์ฌ๋ณํ์ด ๋ฐ๋ ํ์ ๋ฐฉํฅ์ด๊ณ , ๋ น์์ด ์ง์ฌ๊ฐํ์ด ๋ฐ๋ ํ์ ๋ฐฉํฅ์ด ๋จ.
๋นจ๊ฐ์/๋ น์ ํ์ดํ์ ๋ฐฉํฅ์ ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์ง์ฌ๊ฐํ์ ๋ณ์ ์์งํ ๋ฒกํฐ๋ฅผ shape ์ ์ ์ฅํด ๋์์ผ๋ ์ฝ๊ฒ ์ป์ ์ ์์.
์ด๋๋, ์ถฉ๊ฒฉ๋, ๋ฐ๋ฐ๊ณ์์ ๋ํ ๋๋ต์ ์ค๋ช ์ ์์ ๊ฐ์.
๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๋, ๋ ๋ฌผ์ฒด์ ์ถฉ๋ ์ ์๋๋ฅผ ์๊ณ ์๊ณ , ๋ฐ๋ฐ๊ณ์๋ ์๊ณ ์์ ๋, ์ถฉ๋ ํ ๋ ๋ฌผ์ฒด๊ฐ ์ฃผ๊ณ ๋ฐ๋ ์ถฉ๊ฒฉ๋์ ํฌ๊ธฐ๋ง ์๋ฉด ๋จ,
๊ธฐ์กด์ ์ด๋๋ + ์ถฉ๊ฒฉ๋์ ํ๋ฉด ์ถฉ๋ ํ ๋ฌผ์ฒด์ ์๋๋ฅผ ์ ์ ์์ผ๋๊น ๊ทธ๊ฑฐ๋ง ํ๋ฉด ๋ฌผ๋ฆฌ์์ง ๋๋ต์ ๊ตฌํ์ ๋๋ฌ๋ค๊ณ ๋ด๋ ๋์ง.
๊ทธ ์ถฉ๊ฒฉ๋ ๊ฐ์ ์์ ๊ฐ์.
๋ง์ ๊ฐ์์๋ ๋๋ ์ฆ๋ช ์ฐ๊ณ ์ถ์๋ฐ, ์ด๊ฑฐ ๊ณ์ฐ ๋ณต์กํด ๋ค์ง
ํ ๋ฒ ํด ๋ดค๋๋ฐ ๋ฒกํฐ๋ฐฉ์ ์ ํ์ด์ผ ๋๋๋ผ, ์ด๊ฑฐ ์ด๋ป๊ฒ ๋ฒกํฐ ํํ๋ก ๊ทธ๋๋ก ํ ์ ์์๊น ๊ณ ๋ฏผ ํ๋ค๊ฐ ์ฑ๋ถ ๋ณ๋ก ๊ทธ๋ฅ ๋ฐฉ์ ์ ์ธ์์ ํ์์. ์ผ๋จ ๋ต์ด ๋์ค๊ธด ๋์ด
๊ทธ๋ฅ ์๋ณธ ๋งํฌ ๊ฑธ์ด๋๋ฆผ (๋งํฌ)
์ผ๋จ ์ด ๊ฐ์ด ๋์ค๊ธด ๋์จ๋ค๋ ๊ฑธ ์์์ผ๋ฉด ์ข๊ฒ ์ย
========================================================
์ด์ accumulated impulse ์ ๋ํด์ ์ค๋ช ์ ํ ๊ฑฐ์.
์์ ๊ฐ์ด ๋ฐ๋ฅ์ 10kg ๋ฌผ์ฒด๊ฐ 3๊ฐ ์์ฌ์๋ค๊ณ ํ์.
์ค๋ ฅ์ ํฌ๊ธฐ๋ F=m*g ์ (ํธ์์ g๊ฐ์ 10์ด๋ผ๊ณ ํ์)
๋ฐ๋ผ์ 10kg ๋ฌผ์ฒด์ ์์ฉํ๋ ์ค๋ ฅ์ ํฌ๊ธฐ๋ ๊ฐ ๊ฐ 100 N์ผ ๊ฑฐ์
๋ฌผ์ฒด๊ฐ ์ ์งํ ์ฑ ์๋ค๋ฉด ์์ ๊ฐ์ด ํ์ด ์์ฉํ ๊ฑฐ์.
๊ทผ๋ฐ ์ฐ๋ฆฌ๋ ๋ ๋ฌผ์ฒด ์ฌ์ด์ ์ถฉ๊ฒฉ๋๋ง ๊ตฌํ ์ ์์.
๋ฌผ์ฒด a, b, c๊ฐ ์๋๋ฐ, aํ๊ณ b ์ฌ์ด์ ์ถฉ๊ฒฉ๋์ ๊ตฌํด๋๊ณ bํ๊ณ c์ ์ถฉ๊ฒฉ๋์ ๋ค์ ๊ตฌํด๋์ผ๋ฉด ๊ธฐ์กด์ ํด๋จ๋ aํ๊ณ b์ฌ์ด์ ์๋์๋๊ฐ ๋ฌ๋ผ์ ธ์ ๋ ๋ค์ aํ๊ณ b์ฌ์ด์ ์ถฉ๊ฒฉ๋์ ๊ตฌํด์ผ ๋จ.
์ด ๊ณผ์ ์ ๋ฌด์ํ ๋ง์ด ๋ฐ๋ณตํ๋ฉด ๊ฒฐ๊ตญ ์์ ์ ์ธ global solution ์ผ๋ก ์๋ ดํ๊ฒ ๋จ.
์ด ๋ฐ๋ณต ํ์๋ ๋ง์ ์๋ก ์ ํํด์ง์ง๋ง ๋น์ฐํ ํ์๊ฐ ๋ง์์ง๋ฉด ๊ณ์ฐ ์๊ฐ์ด ๋์ด๋จ.
๋ณดํต์ 10๋ฒ~15๋ฒ์ผ๋ก ํ๋ ๊ฑฐย ๊ฐ์๋ฐ.
๋ง๋ก ํ๊ธด ํ๋๋ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์๋์ ๊ฐ์
์์ ๊ฐ์ด ์ถฉ๋์ ์ฌ๋ฌ๋ฒ ๋ฐ๋ณต ํด์ global solution์ผ๋ก ๋๋ฌํ๊ฒ ํ๋ ๋ฐฉ๋ฒ์.
์ด ์์์ย
๋ ๋ฌผ์ฒด a, b๊ฐ ๊ฐ๊น์์ง ๊ฒฝ์ฐ์๋ ๊ทธ๋ฅ ๊ฐ๋ค์ ๋์ ํด์ ์ถฉ๊ฒฉ๋ j๋ฅผ ๊ตฌํ๋ฉด ๋์. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ถฉ๊ฒฉ๋์ผ๋ก ์๋ก์๊ฒ ๋ฉ์ด์ง๋๋ก ์ด๋๋์ ๋ณํ์ํค๋ฉด ๋จ.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๋ ๋ฌผ์ฒด๊ฐ ๋ฉ์ด์ง๋ ๊ฒฝ์ฐ๋ ์ด๋ป๊ฒ ํด์ผ ๋ ๊น.
๋ ๋ฌผ์ฒด๊ฐ ๋ฉ์ด์ง๋ฏ๋ก ๊ทธ๋ฅ ์๊ฐํด์๋ ๊ตณ์ด ์ถฉ๊ฒฉ๋ j๋ฅผ ๊ตฌํ์ง ์์๋ ๋ ๊ฒ ๊ฐ์ง๋ง.
์ด์ฉ๋ค๊ฐ ๋ฌผ์ฒด์ ํฐ ์ถฉ๊ฒฉ๋์ด ์์ฉํ๋ฉด ๊ทธ๊ฑธ ์์ ํ ์๊ฐ ์๊ฒ๋จ.
์์ ๊ฐ์ด ๋ฐ๋ฅ์ ๋ฌผ์ฒด๊ฐ ์ฌ๋ ค์ ธ ์์ผ๋ฉด, ์ถฉ๋ ์ ์ด ๋ ๊ฐ๊ฐ ์๊ธฐ๊ฒ ๋จ.
๊ทธ๋ฐ๋ฐ ์ด์ฉ๋ค ๋นจ๊ฐ์์ด ํฌ๊ฒ ์์ฉํ๋ฉด ์ด๊ฑธ ๋ค์ ์ค์ผ ๋ฐฉ๋ฒ์ด ์๊ฒ ๋๊ณ , ๋นจ๊ฐ์์ด ์ปค์ง๋ฉด ํ๋์๋ ๋ฉ๋ฌ์ ์ปค์ง๊ณ , ๊ทธ๋ผ ๋ค์ ๋นจ๊ฐ์์ด ๋ค์ ์ปค์ง๊ฒ ๋๋ฉฐ ๋๋ ๋จ๋ฆฌ๊ฒ ๋จ
์ด๋ฐ ํ์์ jittering ์ด๋ผ๊ณ ๋ถ๋ฅด๋๋ผ
์ฐ๋ฆฌ์ ํด๊ฒฐ์ฑ ์ ๋ ๋ฌผ์ฒด๊ฐ ๋ฉ์ด์ง๋๋ผ๋ ๊ทธ๋ฅ ๊ณต์์ ๋๋ ค ๋ฐ์์ ์ถฉ๊ฒฉ๋ j๋ฅผ ๊ตฌํ๋ ๊ฑฐ์. ๋ฌผ๋ก ์ถฉ๊ฒฉ๋์ ๋ฐฉํฅ์ย ๊ฐ๊น์์ง๋์ ์ถฉ๊ฒฉ๋์ด๋ ๋ฐ๋๋ฐฉํฅ์ด ๋ ๊ฑฐ์.
๊ทธ๋ฐ๋ฐ ๋ฐ๋ณตํด์ ์ถฉ๊ฒฉ๋์ ๊ตฌํ ๋, ๋ง์ฝ ์ถฉ๊ฒฉ๋์ ์ด ํฉ์ดย ๊ฐ๊น์์ง๋ ๋ฐฉํฅ์ด๋ฉด ๊ทธ๋ฅ 0์ผ๋ก ์ทจ๊ธํ ๊ฑฐ์. ์ถฉ๊ฒฉ๋์ ๋์ ์์ผ์ ๋ํ๋ค๋ ์๋ฏธ์์ accumulated impulse์.
์ฝ๊ฒ ์๋ฅผ ๋ค์ด๋ณด์.
๋ ๋ฌผ์ฒด a์ b๊ฐ ์ถฉ๋ํ๋ค๊ณ ์น์.
๋ฐ๋ณต์ ์ฒซ ๋ฒ์งธ์์ a๊ฐ ๋ฐ์ ์ถฉ๊ฒฉ๋์ด +5๋ผ๊ณ ํ์. ์ด๋ +๋ ์๋ก ๋ฉ์ด์ง๋ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ ์ถฉ๊ฒฉ๋์ ์๋ฏธํ๋ค๊ณ ํ์. a์ ์ง๋์ด 2์ด๋ฉด, a์ ์๋๋ +2.5 ๋งํผ ๋ฐ๋๊ฑฐ์.
๋ ๋ฒ์งธ ๋ฐ๋ณต์์ a๊ฐ ๋ฐ์ ์ถฉ๊ฒฉ๋์ด -2๋ผ ํ์. ์ฆ ์๋ก ๊ฐ๊น์์ง๋ ๋ฐฉํฅ์ผ๋ก ์ถฉ๊ฒฉ๋์ ๋ฐ์๊ฑฐ์. ๊ทธ๋ฌ๋ฉด a์ ์๋๋ ๋ค์ -1.0 ๋งํผ ๋ฐ๋๊ฑฐ์
์ฒซ ๋ฒ์งธ ๋ฐ๋ณต์์ ๋ณํ๋์ด๋ ๋ํ๋ฉด, ์ด ์๋๋ +1.5๋งํผ ๋ณํ๊ฑฐ์. +1.5๊ฐ์ (+5-2)/2.0=1.5 ๋ก๋ ๊ตฌํ ์ ์์.
์ด ์์ ์์ accumulated impulse ๊ฐ์ +5-2=+3์.
์ธ ๋ฒ์งธ ๋ฐ๋ณต์์ a๊ฐ -10์ ์ถฉ๊ฒฉ๋์ ๋ฐ์๋ค๊ณ ํ์. ๊ทธ๋ฌ๋ฉด accumulated impulse๊ฐ -7์ด ๋๋๋ฐ, ์ด๋ ๊ฒ ์์๊ฐ ๋๋ฉด accumulated impulse์ 0์ผ๋ก ๋ฐ๊ฟ๋ฒ๋ฆฐ ํ์, a์ ์๋์ ๋ณํ๋๋ 0์ผ๋ก ํด๋ฒ๋ฆฌ๋ ๊ฑฐ์. ์ฆ a์ ์ด ์๋ ๋ณํ๋์ (+5-2-7)/2.0=-2.0 ์ด ์๋๋ผ ๊ทธ๋ฅ 0์ธ๊ฑฐ์. ๊ทธ๋ฆฌ๊ณ accumulated impulse ๊ฐ๋ ๊ทธ๋ฅ 0์ด ๋จ.
์ ์ด๋ ๊ฒ ํ๋๋ฉด ์ด์จ๋ ๋ ๋ฌผ์ฒด๊ฐ ์ถฉ๋ํ ๋ ์๋ก ๊ฐ๊น์์ง ์๋ ์๊ธฐ ๋๋ฌธ์.
========================================================
์ด์ position correction ์ ํด๋ณด์.
์ง๊ธ๊น์ง ํ ๊ฑฐ๋ก๋ง ๋ฌผ๋ฆฌ์์ง์ ๋ง๋ค๋ฉด ๋ ๋ํ์ด ๋ฐํ๋ฒ๋ฆฐ๋ค๊ฑฐ๋, ๋ฐ๋ฅ์ผ๋ก ์ ์ ๊ฐ๋ผ์๋๋ค๊ฑฐ๋ ํ ๊ฑฐ์.
๋ฐ๋ฅ์ผ๋ก ๊ฐ๋ผ์๋๊ฑด ๋ถ๋์์์ ์ค๋ฅ๋๋ฌธ์ ์๊ธด๋ค๋๋ฐ ์ด์จ๋ ์ด๊ฑธ ๋ณด์ ํด์ผ๋จ.
๋ณด์ ๋ฐฉ๋ฒ ์์ฒด๋ ๊ฐ๋จํจ.
์ถฉ๋ ๊ฒ์ฌ์์ minimum penetration depth๋ฅผ ๊ตฌํ๋ฉด ๊ทธ ๋ฐฉํฅ์ผ๋ก ์ ๋ฌผ์ฒด๋ฅผ ์ด๋์ํค๋ฉด ๋จ.
์ถฉ๋ ๊ฒ์ฌ๋ฅผ ํด์ penetration depth๊ฐ์ ์ ์ฅํด ๋จ์ผ๋ฉด, ์๋ก์ ์ง๋์ ๋ฐ๋ผ์ ๊ทธ ๊ฐ์ ๋๋ ๊ฐ์ง๋ฉด ๋จ.
penetration depth๊ฐ์ด 10์ด๊ณ ๋ฌผ์ฒด a๊ฐ ์ง๋์ด 1, ๋ฌผ์ฒด b๊ฐ ์ง๋์ด 4์ด๋ฉด
๋ฌผ์ฒด a๋ 4*10/(1+4)=8๋งํผ ๋ค๋ก ๋ฌผ๋ฌ๋๊ณ , ๋ฌผ์ฒด b๋ 1*10/(1+4)=2 ๋งํผ ๋ค๋ก ๋ฌผ๋ฌ๋๋ฉด ๋จ
๊ทธ๋ฐ๋ฐ ์ฝ๊ฐ์ ์ฌ๋ฐฑ์ ๋๋๊ฒ ์ข์. ๋ง ๋ค์ด๋ณด๋ฉด 0.1์์ 0.01์ ๋๋ ์ฌ์ ๋๋๊ฑฐ ๊ฐ๋๋ผ.
์ฌ๋ฐฑ์ ์ ๋๋ฉด ๋ฌผ์ฒด๊ฐ ์ถฉ๋ ํ๋ค ์ ํ๋ค ํ ์ ์์ด์ ๋ถ์์ ํด์ง.
========================================================
์ด์ ๋ง์ง๋ง์ผ๋ก warmstarting ์ ๋ํด ์ค๋ช ํ ๊ฑฐ์.
์๋์ฒด๋ก ๋ฐ๋ฏํ ์์ ์ ๋ ๋๋๋ฐ ๋ง ๊ทธ๋๋ก ๋ฌผ๋ฆฌ์์ง ๊ณ์ฐ์ ํ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ์ถฉ๊ฒฉ๋์ ์ด๋ฆผํด์ ์์ดํ๋ ๊ฑฐ์.
๋ ๋ฌผ์ฒด a์ b๊ฐ ์ถฉ๋ํด์ 15๋ฒ์ ๋ฐ๋ณต ๋์ a๊ฐ ๋ฐ์ accumulated impulse ๊ฐ์ด +7์ด๋ผ๋ฉด
๊ทธ ๋ค์ ๋ฐ๋ณต์ด ์์๋ ๋ ๋ฏธ๋ฆฌ +7 ์ impulse๋ฅผ ๊ฐํ๊ณ ์์ํ๋ ๊ฑฐ์. ๊ฐ์ด ๋๋ฌด ํ๋ ๊ฑฐ ๊ฐ๋ค ์ถ์ผ๋ฉด +7๊ทธ๋๋ก ๋ฃ์ง ๋ง๊ณ ์ผ๋ถ๋ง ๋ฃ๋๊ฐ
์ด๋ ๊ฒ ๋๋ฉด ์๊ฐ์ด ์ง๋ ์๋ก ๋ ์ ํํด ์ง๊ฒ ๋๋ค๋ ๊ฑธ ์ ์ ์์ง.
========================================================
์ด๋ ๊ฒ ๋๋ ๋ฌผ๋ฆฌ์์ง ๋ง๋ค์ด ๋ดค๋๋ฐ ๋ญ ์ฌ๋ฐ์์
๊ทผ๋ฐ ๋ฌธ์ ์ ์ด ๋ํ๋ค์ด ์๊ฐ์ผ ๋๋ ์ ๋๋ก ์ถฉ๋๊ฒ์ฌ๊ฐ ์๋์ ๋ชป ํ๋๋ผ
์ ์ฌ์ง์ฒ๋ผ ์๋ก ๋ํ์ด ํต๊ณผ๋๋ฉด์ ์์ฃผ ๊ฐํ์ด ๋จ.
์ด๊ฑฐ dirk gregorius ํํ ์ด๊ฑฐ ๋ญ ์ด์บ ํ๋ ํ๋๊น ์๊ธฐ๋ ๋ชจ๋ฅด๊ฒ ๋ค๊ณ ํจ.
์ด๊ฑฐ ๋๋ฌธ์ ๋ฌธ์ ์๊ธฐ๋ฉด SAT ๋ง๊ณ ๊ฑ gjk ์๊ณ ๋ฆฌ์ฆ ์ฐ์...
์ถฉ๋ ๊ฒ์ถํ ๋, 3๋ฒ ๊ผญ์ง์ ์ ๋ํด์ ๋ด์ ๊ณ์ฐํ๋ฉด ์์ ๋์ค๋๊ฑฐ ์๋? 3๋ฒ ๋ฒกํฐ (a, b), ๋ณด๋ผ์ ๋ ธ๋ฉ ๋ฒกํฐ (0, n) ์ผ ๋, ๋ด์ = a*0 + b*n = b*n ์ธ๋ฐ, a, b, n ์ ๋ถ ์์๋๊น ๋ด์ ๋ ์์ ์๋? ์๊ธด๊ฒ๋ 3๋ฒ ๊ผญ์ง์ ์ ๋ํ ๋ฒกํฐ๋ ๋ณด๋ผ์ ๋ ธ๋ฉ๋ฒกํฐ์ ๋ด์ ์ ๊ทธ ์ฌ์ด ๊ฐ์ด 90๋๊ฐ ์๋๊ฒ ์๊ฒจ์ ๋ด์ ์ 0๋ณด๋ค ํฌ๊ฒ ๋์ค๊ฒ ๋๋ฐ. ๊ผญ์ง์ ๋ง๋ค ์ฐ๋ ๋ ธ๋ฉ๋ฒกํฐ๊ฐ ๋ค๋ฅธ๊ฑด๊ฐ?
3๋ฒ ๊ผญ์ง์ ์ ๋ํ ๋ ธ๋ง ๋ฒกํฐ๋ (0,-1) ์. ์ค๋ช ์ ๋๋ฌด ๋์ถฉํ๋.... 1๋ฒ ๊ผญ์ง์ ์ ๋ ธ๋ง ๋ฒกํฐ๋ (0,1) ์ด๊ณ 2๋ฒ ๊ผญ์ง์ ์ ๋ํ ๋ ธ๋ง ๋ฒกํฐ๋ (-1,0)์ด๊ณ 4๋ฒ์ (1,0) ์. ๊ฐ ๊ผญ์ง์ ์ ์ผํธ์ ์กด์ฌํ๋ ๋ณ์ ์์ง์ ๋ฒกํฐ์
์ ใ ใ . ์ ์ง์ง ๋๋จํ๋ค ใ ใ ใ ๋ด์ ์ผ๋ก ์ ๋ด๋ถ์ ๋ค์ด์์๋๊ฑธ ๊ณ์ฐํ๋๊ฑด ์๊ฐ๋ ๋ชปํด๋ด. ์ ๊ธฐํ๋ค ..
์ฌ๋ฐ๊ฒ ์๋ดค์!
๊ทธ๋ฆฌ๊ณ ๋ ํ๋ ์ง๋ฌธ ์์. ๋ํ ๊ตฌ์กฐ์ฒด์์ 1๋ฒ์ ๊ณผ 2๋ฒ์ ์ ์ฐ๊ฒฐ์ฑ์ ๋ํ ์ ๋ณด๋ ์ด๋์ ๋ด๊ฒจ์ ธ์๋ ๊ฒ์? vertex ๋ฐฐ์ด์ ์๋๊ฑด๊ฐ?
์ด ์ผ๋ง์ ์ ๋ด์ ์ผ๋ก ์ถฉ๋์ฒดํฌํ๋๊ฑฐ ์ฑ ์์ ๋ดค๋๋ฐ ๋ค์๋ณด๋ ๋ฐ๊ฐ๋ค ์ ์ฑ์ถ!
์ ๊ฐ์๋ฅผ ์จ์ฃผ์ จ๋ค...ใ ใ
์ ์ ์ ์ฅํ ๋ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก๋ง ์ ์ฅํ๋ฉด ์ฐ๊ฒฐ์ฑ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ฒจ ์๋ค๊ณ ํ ์ ์์. ์์์ ์ ์ vertex[0]์ ๋จผ์ ์ ์ฅ ํ๊ณ ๊ทธ ๋ค์ ์ ์ ์๊ณ๋ฐฉํฅ์ผ๋ก ํ ์นธ์ฉ vertex[1]์ ์ ์ฅํ๊ณ ๊ทธ ๋ค์ ์ ์ vertex[2]์ ์ ์ฅํ๋ ์์ผ๋ก ํ๋ฉด ๋จ
๋ค๋ฅธ๊ฒ๋ค๋ ์ข์ ๋ด์ฉ์ ๋ค๋ฃจ๋๋ฐ ๊ทธ๊ฒ๋ค ๋ณด๋ค๋ ์๋ฆฐ์นดํ GDC ๊ฐ์๋ค์ ์ ๋ถ ๋ค ๊ฐ์ถํจ. ์ ์ฝ์กฐ๊ฑด์ด๋ผ๋์ง, ๋ณผ๋งํ ๋ด์ฉ๋ค์ด ์์ฒญ ๋ง์.
๋๋ฌด ์ ์ตํ ๊ธ
์์น ๋ณด์ ์ ๋ฌผ์ฒด๋ฅผ ์ด๋๋ง ์ํค๋ฉด ์๋๊ณ ํ์ ๋ ์ ์ฉ์์ผ์ผ ๋ํ ๋ฐ... ์กด๋ ๊ธธ๊ณ ์์ ๋ง๋๊ธฐ๋ผ๋ฆฌ ๋๋จ๋จธ๋ฆฌ์์ ์ง๊ฐ์ผ๋ก ์ถฉ๋์ด๋ฌ๋ฉด ์์น๋ง ์ฎ๊ธฐ๋ ๊ฑฐ๋ก๋ ์ถฉ๋ถ์น ์์ง. ์๋ ๋์ ์์น๋ฃ์ด์ ์ถฉ๊ฒฉ๋ ๊ณ์ฐํ๋ฏ ํ๋ฉด ๋. ๊ทธ๋ฆฌ๊ณ ์ถฉ๋๊ฒ์ถ๋ ๊ฑ gjk ์ฐ๋ ๊ฒ ๋์ ๊ฑธ. ์๊ฐ๋ง ๋ฌธ์ ๊ฐ ์๋๋ผ ์๊น ์๋ก ๋ ์กด๋ ๊ธธ๊ณ ์์ ๋ง๋๊ธฐ๋ ์ด์ฉ?
๊ฐ์ฉ๋ค ์ธ๋๊ฒ๊ฐค์ ๋ณด๋ฐฐ