Megint egy kis technika bla-bla következik, de hátha, valakinek még szüksége lesz erre, amit tegnap megtaláltam :)
EDIT: A Boundingbox az a téglatest, aminek két pontja van eltárolva: egy maximum és minimumpont, ami közrezár egy teret, és így remekül lehet "durvább" ütközésérzékelésre használni.
Tegnap és tegnap előtt fejest ugrottam a magasabb szintű ütközés érzékelésbe - egészen pontosan azzal kísérleteztem, hogy hogyan is tudok kinyitni egy ajtót úgy, hogy csak akkor indítsa az animációt, ha ránézek, és adott távolságon belül vagyok. Fejben megvolt az egyszerű ötlet - a kamera közepéből indítók egy Ray-t a camTarget irányába, és egyszerűen megnézem, hogy ütközik-e az adott test Boundingbox-jával. Ez, kis küzdelmek után sikerült is (előtte még sosem használtam ray-t de meg kell mondjam, ennél egyszerűbb tényleg nem is lehetne.)
Első lépés megvolt, továbbléptem: sok ajtó, elszórva véletlenszerűen a világban, és egyesével lehessen nyitni őket. Na igen, de itt szemet szúrt valami: a boundingbox-ok egyáltalán nem úgy helyezkednek el, ahogy az ajtók. Amint elforgatok egy ajtót, a box megnő, torzul, és az addigi tökéletes burkolás szükségtelen terepet fog elemészteni. De gondoltam, kihagytam a forgatást a kódból a BBox-hoz. De sajnos a probléma közel sem volt ennyire egyszerű. Szóval belevetettem magam a google izgalmas világába, és megismerkedtem az Axis-aligned bounding-box-okkal. (Nagy bánatomra, elvoltam addig is nélkülük).
Vagyis az XNA-s box-ok mindig a tengelyekre merőlegesen helyezkednek el, így hiába forgatom őket, a végeredmény mindig ez lesz. A tegnapi napom megoldás kutatás jegyében telt el, és, eléggé siralmas eredménnyel. Találtam pár próbálkozást, de leginkább csak alig-alig, vagy csak egy-két ritka esetre valót. Már kezdtem beletörődni, hogy kénytelen leszek írni egyet (amitől húzódtam, bevallom, mivel tippem sincs, hány napomat emésztette volna fel...) amikor kb a 5. találati oldalán a google-nak kidobta a Microsoft apphub oldalát: és mik vannak: ott van fenn egy teljesen rendben megírt Object-Oriented boundingbox kód, minden szükséges helper metódussal együtt, teljesen ugyanolyan szinten és minőségben, abszolút kompatibilisen megírva XNA-nak az alap box-ához képest. Ma hozzáírtam a saját kódjaimat egy kicsit, és örömmel jelentem: tökéletesen üzemel.
Tehát, ezúton is örök hála az MS fejlesztőinek, illetve, az ebbe a problémába belefutó magyar fejlesztőknek, itt a link: