viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec8ffa11d0283137a147df66c0ff0e9ff48c5b5f7e56d2caa097f55dd2ac1c8f2b348d1056587e49221f4e0515f055f5272bd75a8f3d


๊ฑด์ถ•๋ฌผ์„ ์„ค์น˜ํ• ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ๊ฑด ์Šค๋ƒ…์‹œ์ผœ์ฃผ๋Š” ์‹œ์Šคํ…œ์ด๋ผ๊ณ  ์ƒ๊ฐํ•จ.

๊ทผ๋ฐ ๋ณดํ†ต ๊ฑด์ถ•๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„์„ ๋ณด๋ฉด ๊ฐ ๊ฑด์ถ•๋ฌผ๋“ค์ด ๊ฐ์ž์˜ ์ขŒํ‘œ์‹œ์Šคํ…œ์„ ์ด์šฉํ•˜๊ณ  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๊ฑด์ถ•๋ฌผ์˜ ์ขŒํ‘œ๊ณ„์— ๋งž์ถฐ์„œ ์Šค๋ƒ…์‹œ์ผœ์คŒ.


์‰ฝ๊ฒŒ ๊ฐ€๋Š” ๋ฐฉ๋ฒ•์€ ์žˆ์Œ.

Transform.TransformPoint()๋ฅผ ์ด์šฉํ•˜๋ฉด ์›”๋“œํฌ์ง€์…˜์„ ํ•ด๋‹น ํŠธ๋žœ์Šคํผ ์•„๋ž˜์˜ ๋กœ์ปฌ ํฌ์ง€์…˜์œผ๋กœ ๋ฐ”๊ฟ”์คŒ.

๋ฐ˜๋Œ€๋กœ Transform.InverseTransformPoint()๋ฅผ ์ด์šฉํ•˜๋ฉด ํ•ด๋‹น ํŠธ๋žœ์Šคํผ ์•„๋ž˜์˜ ๋กœ์ปฌ ํฌ์ง€์…˜์„ ์›”๋“œ ํฌ์ง€์…˜์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ .


๊ทผ๋ฐ ์ด๊ฑด ์ผ๋‹จ ํ•ด๋‹น ํŠธ๋žœ์Šคํผ์„ ์ง€๋‹Œ ๊ฒŒ์ž„์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๋ฐฉ๋ฒ•์ด๊ณ , ๋ญ”๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ์‘์šฉํ•˜๊ธฐ๊ฐ€ ํž˜๋“ฌ.


๊ทธ๋ž˜์„œ ์กฐ๊ธˆ ์•Œ์•„๋ดค์Œ.


๊ธฐ๋ณธ์ ์œผ๋กœ ํŠธ๋žœ์Šคํผ์„ ๊ณ„์‚ฐ ํ•  ๋•Œ ์ž์‹ -> ๋ถ€๋ชจ ์ˆœ์„œ๋กœ, ์Šค์ผ€์ผ->๋กœํ…Œ์ด์…˜->ํฌ์ง€์…˜ ์ˆœ์„œ๋กœ ๊ณ„์‚ฐํ•ด์คŒ.

์ž์‹์˜ ๋กœ์ปฌ์Šค์ผ€์ผ/๋กœํ…Œ์ด์…˜/ํฌ์ง€์…˜์„ ๊ณ„์‚ฐํ•ด์ฃผ๊ณ  ๋ถ€๋ชจ์˜ ๋กœ์ปฌ์Šค์ผ€์ผ/๋กœํ…Œ์ด์…˜/ํฌ์ง€์…˜์„ ์ ์šฉ์‹œ์ผœ์ค˜์„œ ๋‚˜์˜ค๋Š”๊ฒŒ ์ตœ์ข…์ ์ธ ์ž์‹์˜ ํŠธ๋žœ์Šคํผ์ž„.


๋กœํ…Œ์ด์…˜์„ ์ ์šฉํ•˜๋Š”๊ฑด ๋กœํ…Œ์ด์…˜ ์ฟผํ„ฐ๋‹ˆ์˜จ์— ๊ณฑํ•ด์ฃผ๋ฉด ๋˜๋Š”๋ฐ, ์‚ฌ์‹ค ์ฟผํ„ฐ๋‹ˆ์˜จ์€ ๊ณต๋ถ€ํ•ด๋ณธ์  ์—†์–ด์„œ ํ• ๋ง์ด ์—†์Œ.

xyz๊ฐ’์œผ๋กœ๋„ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•œ๋ฐ, Z, X, Y ์ˆœ์„œ๋กœ ํšŒ์ „์‹œ์ผœ์ฃผ๋ฉด ๋จ.

3D ๋กœํ…Œ์ด์…˜ ๋งคํŠธ๋ฆญ์Šค ์ฐพ์•„๋ณด๋ฉด ํšŒ์ „์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ๋ฒ• ๋‚˜์˜ด. ์˜ค๋ฅธ์†์ขŒํ‘œ๊ณ„,์™ผ์†์ขŒํ‘œ๊ณ„์— ๋”ฐ๋ผ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ฐ๋„์— -1 ๊ณฑํ•ด์ฃผ๋ฉด ์„œ๋กœ ํ˜ธํ™˜๋œ๋‹ค๋”๋ผ.




๋กœ์ปฌํฌ์ง€์…˜์„ ํ•œ๋‹จ๊ณ„ ์œ— ๋ถ€๋ชจ์˜ ์ขŒํ‘œ๊ณ„๋กœ ๋ณ€ํ™˜์‹œ์ผœ์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์งœ๋ดค์Œ

์ด๊ฒŒ ๊ดœํžˆ ๋ณต์žกํ•˜๊ฒŒ ์ƒ๊ฐํ•ด์„œ ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ ์•Œ๊ณ ๋ณด๋‹ˆ ์ œ์ผ ๊ธฐ๋ณธ์ ์ธ ์ž‘์—…์ด๋”๋ผ.


๊ทธ๋ƒฅ ๋กœ์ปฌํฌ์ง€์…˜์— ๋ถ€๋ชจ์˜ ์Šค์ผ€์ผ/๋กœํ…Œ์ด์…˜/ํฌ์ง€์…˜์„ ์ ์šฉ์‹œ์ผœ์ฃผ๋Š” ์ž‘์—…์ž„.


์„ธ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Œ


Vector3 p = localPos;

p.x *= parentScale.x;

p.y *= parentScale.y;

p.z *= parentScale.z;

p = RotateZ(p, parentRot.eulerAngles.z * Mathf.Deg2Rad);

p = RotateX(p, parentRot.eulerAngles.x * Mathf.Deg2Rad);

p = RotateY(p, parentRot.eulerAngles.y * Mathf.Deg2Rad);

p += parentPos;


return p;


๊ทธ๋ƒฅ ํ•œ๋‹จ๊ณ„์”ฉ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ


Vector3 p = localPos;

p.x *= parentScale.x;

p.y *= parentScale.y;

p.z *= parentScale.z;

p = parentRot * p;


p += parentPos;


return p;


Quaternion ์ด์šฉํ•˜๊ธฐ


Matrix4x4 m = Matrix4x4.TRS(parentPos, parentRot, parentScale);

return m.MultiplyPoint3x4(localPos);


๋งคํŠธ๋ฆญ์Šค ์ด์šฉํ•˜๊ธฐ.

์ด ๋งคํŠธ๋ฆญ์Šค๋“ค์„ ๊ณฑํ•ด๋‚˜๊ฐ€๋ฉด ๊ทธ๋ž˜ํ”ฝ์Šค์—์„œ ๋ชจ๋ธ->์›”๋“œ ๋ณ€ํ™˜ํ• ๋•Œ ์“ฐ์ด๋Š” ๋งคํŠธ๋ฆญ์Šค๊ฐ€ ๋‚˜์˜ค๋Š”๊ฒŒ ๋งž๋‚˜?


์…‹ ๋‹ค ์œ ๋‹ˆํ‹ฐ ํŠธ๋žœ์Šคํผ๊ณผ ๊ฐ™์€ ๊ฐ’์ด ๋‚˜์˜ด.

๊ทธ๋ƒฅ ์ด ์ž‘์—…์„ ์ž์‹ -> ๋ถ€๋ชจ ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ˜๋ณตํ•ด์ฃผ๋Š”๊ฒŒ ์ž์‹์˜ ์‹ค์ œ ์›”๋“œํฌ์ง€์…˜์„ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์ธ๊ฒƒ ๊ฐ™์Œ.


๋ฐ˜๋Œ€๋กœ ์›”๋“œํฌ์ง€์…˜์—์„œ ๋กœ์ปฌํฌ์ง€์…˜์œผ๋กœ ๊ฐ€๋Š”๊ฑด ์—ญ์ˆœ์œผ๋กœ ์ž‘์—…ํ•ด์ฃผ๋ฉด ๋จ.

์ฟผํ„ฐ๋‹ˆ์˜จ์ด๋ž‘ ๋งคํŠธ๋ฆญ์Šค์— inverse๊ธฐ๋Šฅ์ด ์žˆ๋˜๋ฐ ์ด๊ฑฐ ์ด์šฉํ•˜๋ฉด ๋  ๋“ฏ?


๋งจ๋‚  ๋ง๋กœ๋งŒ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ์ด์šฉํ•ด ์ขŒํ‘œ๊ณ„๋ฅผ ์ด๋™ํ•œ๋‹ค๊ณ  ๋“ค์–ด์„œ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๊ฐ”๋Š”๋ฐ ์ง์ ‘ ํ•ด๋ณด๋‹ˆ๊น ํ™• ์™€๋‹ฟ๋„ค.


๊ทธ๋ฆฌ๊ณ  ๋งคํŠธ๋ฆญ์Šค๊ฐ€ ์™œ ์œ ์šฉํ•œ์ง€๋„ ๋“œ๋””์–ด ๊นจ๋‹ฌ์•˜์Œ.

๋งคํŠธ๋ฆญ์Šค ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๊ณฑํ•ด์•ผ ํ•  ๋•Œ ๊ณ„์‚ฐ์ด ์—„์ฒญ ์••์ถ•๋˜๋Š”๋“ฏ ใ„ทใ„ท


์ด์ œ ๋‹ค์‹œ ๋ชจ๋ธ๋ง ํ•˜๋Ÿฌ ๊ฐ”๋‹ค๊ฐ€ ๊ฐ•์˜ ํ•œ ์ฑ•ํ„ฐ ๋๋‚˜๋ฉด ๋‹ค์‹œ ๊ฑด์ถ•์‹œ์Šคํ…œ์„ ์ ์šฉํ•˜๋Ÿฌ ์˜ฌ ์ƒ๊ฐ์ž„