.[ ČeskéHry.cz ].
XNA - detekce kolizí mezi kamerou a modely

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Jack M.A.X.



Založen: 28. 07. 2007
Příspěvky: 60

PříspěvekZaslal: 5. prosinec 2008, 18:13:45    Předmět: XNA - detekce kolizí mezi kamerou a modely Odpovědět s citátem

Nedávno jsem začal dělat svůj vlastní 3d engine v XNA. Nějaké zkušenosti s DirectX mám, ale spíše jen na 2D úrovni. Potřeboval bych poradit s detekcí kolizí mezi kamerou a modely. Celá geometrie levelu je tvořena modely ve formátu .x. Nějaké informace jsem si už vygoogloval, ale nejraději bych viděl zdrojové kódy, které by přimo ukazovaly řešení tohoto problému.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 5. prosinec 2008, 20:54:55    Předmět: Odpovědět s citátem

Kolizí kamery s objekty myslíš detekci toho, zda bude objekt vidět (tedy zasahuje do tělesa kamery) ? Pokud ano, tak můžeš postupovat např. tak, že pro každý objekt vypočítáš tzv. bounding sphere (kouli, která obaluje objekt). Na to je i přímo nějaká funkce, takže to nemusíš kódit. Dále pak budeš testovat, zda koule zasahuje do tělesa kamery, což je komolý jehlan (frustum). Stačí zagooglit "sphere frustum collision" a dostaneš hromadu výsledků. Hodně by Ti mohl taky pomoci tento krátký článek na MSDN, který se zabývá přímo kolizemi v XNA 3.0: http://msdn.microsoft.com/en-us/library/bb313876.aspx
Je to tak typická úloha ve 3D grafice, že žádné kódy nejsou potřeba - všechno už je v XNA, stačí jen najít správnou metodu Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Amorph



Založen: 06. 09. 2007
Příspěvky: 68

PříspěvekZaslal: 6. prosinec 2008, 12:26:44    Předmět: Odpovědět s citátem

V xna je to fakt jednoduchy. Pouzivam to zhruba takhle:

kód:

BoundingFrustum frustum=new BoundingFrustum(camera.viewMatrix*camera.projectionMatrix);

BoundingSphere bs=object.Model.Meshes[0].BoundingSphere.Transform(Matrix.CreateTranslation(object.pos));

if (bs.Intersects(frustum))
                        object.Draw(camera.projectionMatrix, camera.viewMatrix);


Pokud ma tvuj model vic meshu, tak samozrejme musis BoundingSphere spocitat sam, ale to je docela snadny.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Jack M.A.X.



Založen: 28. 07. 2007
Příspěvky: 60

PříspěvekZaslal: 6. prosinec 2008, 16:45:18    Předmět: Odpovědět s citátem

Díky, to je přesně ono, co jsem potřeboval.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna