panda3d: tip - grizlupo/_ GitHub Wiki

์ขŒํ‘œ๊ณต๊ฐ„ ๋ฐ”๊พธ๊ธฐ

์ฃผ์–ด์ง„ ์ขŒํ‘œ๋ฅผ ๋‹ค๋ฅธ ์ขŒํ‘œ๊ณต๊ฐ„์˜ ์ขŒํ‘œ๋กœ ๋ฐ”๊พธ๋ ค๋ฉด?

ํ˜„ ์ขŒํ‘œ๊ณต๊ฐ„์„ ๋ชฉํ‘œ ์ขŒํ‘œ๊ณต๊ฐ„์œผ๋กœ์˜ ๋ณ€ํ™˜์„ ๋งŒ๋“ ๋‹ค.

  transform = src_space.get_transform(dst_space)

๋ฐ”๊ฟ€ ์ขŒํ‘œ์— ๋ณ€ํ™˜์„ ์ ์šฉํ•œ๋‹ค.

  point * transform->get_mat()

CollisionHandlerEvent ํŒจํ„ด

CollisionHandlerEvent์€ ๋‘ ๋ฌผ์ฒด๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ์ถฉ๋Œํ•  ๋•Œ, ์ถฉ๋Œ์ด ๊ณ„์† ์ด์–ด์งˆ ๋•Œ, ์ถฉ๋Œ์„ ๋ฒ—์–ด๋‚  ๋•Œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

์ถฉ๋Œ ์ด๋ฒคํŠธ๋Š” ํ‚ค๋ณด๋“œ๋‚˜ ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ์™€ ๋‹ฌ๋ฆฌ ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ์ด๋ฆ„์ด ์žˆ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ addInPattern, addAgainPattern, addOutPattern์œผ๋กœ ์ด๋ฆ„์˜ ๋ชจ์–‘์ƒˆ๋ฅผ ๋“ฑ๋กํ•˜๊ฒŒ ๋˜์–ด ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด handler.addInPattern("%fn-into-%in") ์ด๋ผ๊ณ  ํ–ˆ๊ณ , ๋‘ ๋ฌผ์ฒด์˜ ์ด๋ฆ„์ด comet๊ณผ earth๋ผ๋ฉด comet-into-earth๋ผ๋Š” ์ด๋ฆ„์˜ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, base.accept("comet-into-earth", self.apocalypse)๋ผ๊ณ  ํ•˜๋ฉด ํ˜œ์„ฑ๊ณผ ์ง€๊ตฌ์˜ ์ถฉ๋Œ์ด ๊ฐ์ง€๋  ๋•Œ ์ข…๋ง ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ฒŒ ๋œ๋‹ค.

ํŒจํ„ด์— ์‚ฌ์šฉ๋œ %fn๊ณผ %in์ด ๊ฐ๊ฐ From ๋ฌผ์ฒด์˜ ์ด๋ฆ„๊ณผ Into ๋ฌผ์ฒด์˜ ์ด๋ฆ„์œผ๋กœ ๋Œ€์ฒด๋˜์–ด ์‹ค์ œ ์ด๋ฒคํŠธ ์ด๋ฆ„์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ ๋ฐ–์— sun์ด๋‚˜ moon ๊ฐ™์€ ๋ฌผ์ฒด๊ฐ€ ๋” ์žˆ๋‹ค๋ฉด moon-into-earth๋ผ๊ฑฐ๋‚˜ earth-into-sun ๊ฐ™์€ ์ด๋ฒคํŠธ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฌผ์ฒด์˜ ์ด๋ฆ„๋ฟ ์•„๋‹ˆ๋ผ ๋ฌผ์ฒด์˜ ํƒœ๊ทธ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํƒœ๊ทธ๋Š” getNetTag๋กœ ๊ฒ€ํ† ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ฌผ์ฒด์— ์ง์ ‘ ๋“ฑ๋ก๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋”๋ผ๋„ ๊ณ„์ธต ๊ตฌ์กฐ ๋‚ด์—์„œ ์ฐพ์•„์ง€๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

%(tag)ft, %(tag)it๊ฐ€ ๊ฐ๊ฐ ํƒœ๊ทธ์˜ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฌผ์ฒด์— ObjectKind๋ผ๋Š” ํƒœ๊ทธ๊ฐ€ ์žˆ๊ณ , star, planet, satellite ๋“ฑ์˜ ๊ฐ’์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด, %(ObjectKind)ft-into-%(ObjectKind)it๋ผ๋Š” ํŒจํ„ด์€ planet-into-star๋‚˜ satellite-into-planet๊ฐ™์€ ์ด๋ฒคํŠธ ์ด๋ฆ„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ˜น์€ ์ด๋ฆ„๊ณผ ํƒœ๊ทธ๋ฅผ ์„ž์–ด์„œ %(ObjectKind)ft-into-%in ํŒจํ„ด์—์„œ๋Š” planet-into-sun ๊ฐ™์€ ์ด๋ฒคํŠธ ์ด๋ฆ„๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

%(tag)fh, %(tag)fx, %(tag)ih, %(tag)ix๋Š” ๊ฐ๊ฐ ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋ฅผ ํŒ๋‹จํ•œ๋‹ค. ๋Œ€์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ํŒ๋‹จ๋งŒ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ ์ด๋ฒคํŠธ ์ด๋ฆ„์—์„œ ์ด ๋ถ€๋ถ„์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด starship์ด๋ผ๋Š” ๋ฌผ์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด, %fn-into-all%(ObjectKind)ih ํŒจํ„ด์— ๋Œ€ํ•ด starship-into-all์ด๋ผ๋Š” ์ด๋ฒคํŠธ ์ด๋ฆ„์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ์ด๋Š” Into ๋ฌผ์ฒด๊ฐ€ ObjectKind๋ผ๋Š” ํƒœ๊ทธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋•Œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ํƒœ๊ทธ์˜ ๊ฐ’์€ ์ƒ๊ด€์—†๋‹ค. star์—ฌ๋„ planet์—ฌ๋„ ์ƒ๊ด€์—†๋‹ค. ํƒœ๊ทธ๊ฐ€ ์žˆ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

%fs์™€ %is๋Š” CollisionSolid์˜ tangible ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋œ๋‹ค. tangible์ด๋ฉด 't' intangible์ด๋ฉด 'i'๋กœ ๋Œ€์ฒด๋œ๋‹ค. ์„ค๋ช…์„œ์— tangible์€ CollisionHandlerPusher๊ฐ€ ๋ฌผ์ฒด๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ค์ •์ธ ๊ฒƒ์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค. tangible์ด๋ฉด ๋‹ค๋ฅธ ๋ฌผ์ฒด๊ฐ€ ์ด๋ฅผ ๊ฐ€๋กœ์ง€๋ฅผ(intersect) ์ˆ˜ ์—†๊ณ , intangible์ด๋ฉด ๋ฌด์‹œํ•ด ๋ฒ„๋ฆฌ๋ฏ€๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ %fs์™€ %is๋Š” CollisionHandlerPusher๊ฐ€ ์•„๋‹Œ ํ•ธ๋“ค๋Ÿฌ์—์„œ ์ด ๊ฐ’์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ํŒŒ์•…๋œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ %ig๋Š” Into ๋ฌผ์ฒด๊ฐ€ CollisionNode์ธ์ง€ GeomNode์ธ์ง€์— ๋”ฐ๋ผ ๊ฐ๊ฐ 'c'์™€ 'g'๋กœ ๋Œ€์ฒด๋œ๋‹ค. ๋ญ”์ง€ ๊ฐ์€ ์˜ค๋Š”๋ฐ ๋”ฑํžˆ ์–ด๋””์— ์“ฐ๋ฉด ์ข‹๊ฒ ๋‹ค ์‹ถ์€ ์ƒ๊ฐ์€ ์—†๋‹ค.