.[ ČeskéHry.cz ].
Výpočet kolize objektů
Jdi na stránku Předchozí  1, 2, 3  Další
 
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
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 21. duben 2008, 09:41:18    Předmět: Odpovědět s citátem

Juraj napsal:
Tak jelikož moje matematika v 3D prostoru trochu pokulhává, potřeboval bych od Vás pomoct.

Potřebuj si vypočítat souřadnice např kvádru kolem vykresleného objektu, tak abych mohl testovat zda jsem náhodou neklik na daný objkt.

Osobně si myslím, že pro výpočet použiji nějaké body z world matice objectu, ale nevím jak dostat ty správné abych to mohl testovat při kliku na plátno.


"body z world matice" whe?

jinak co treba si u kazdeho objektu ulozit jeho bounding box a pak ho postupne rotovat s objektem podle matice daneho objektu?

pripade se pouzivaji AABB -> axis aligned bounding box
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 21. duben 2008, 09:51:14    Předmět: Odpovědět s citátem

No skoro jsi mi odpoveděl, ale mě právě jde jak vypočítat ten pomyslný bounding box?

Mám to tako: object načtu ze souboru a nějak ho poupravím. Abych mohl podporovat i aniamce, rozeberu modely na části (pokud mají) a já potřebuji vypočítat např že:

elektrana je od 0,10 do 20,30 abych to mohl otestovat na klick na celé plátno..

ps: nezajímá mě to kolik to má částí ale jako celek pro označení, také můsíme brát v úvahu posun dále od kamery nebo blíže. Kvůli tomu si také myslím že se k výpočtu musí použít nějaké body world matice objektu, protože pro myš bude políčko různě veliké podle toho jak bude blízko kamery.


Naposledy upravil Juraj dne 21. duben 2008, 09:53:45, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 21. duben 2008, 09:52:52    Předmět: Odpovědět s citátem

AABB se dá zjistit jednoduše. Zjistíš si ze všech vrcholů nejmenší hodnotu v X, potom největší hodnotu v X, dál nejmenší v Y, největší v Y a to samý pro Z. A máš AABB.
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 21. duben 2008, 09:55:15    Předmět: Odpovědět s citátem

Quiark napsal:
AABB se dá zjistit jednoduše. Zjistíš si ze všech vrcholů nejmenší hodnotu v X, potom největší hodnotu v X, dál nejmenší v Y, největší v Y a to samý pro Z. A máš AABB.


ano něco takového jsem myslel Smile, díky


a tímto ošetřím i rotece posuny objectu??
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 21. duben 2008, 10:01:10    Předmět: Odpovědět s citátem

Tohle vypočítáš v základní poloze objektu. Pak s tím budeš točit a hýbat stejně jako s objektem. Bude to v souřadnicích objektu, takže pro zjištění kliku to budeš muset vždy přetransformovat do souřadnic obrazovky.
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 21. duben 2008, 12:30:14    Předmět: Odpovědět s citátem

Quiark napsal:
Tohle vypočítáš v základní poloze objektu. Pak s tím budeš točit a hýbat stejně jako s objektem. Bude to v souřadnicích objektu, takže pro zjištění kliku to budeš muset vždy přetransformovat do souřadnic obrazovky.


Tak už vím jak to spočítat, ale nyní nevím jak dostanu minimální a maximální souřadnice. Pokud bych si to defonoval sám, tak ano ale nevím jak je dostat z načítaných objectů. Nejsem si jist zda by šlo a bylo by effectivní nějak projít všechny jeho části a v tom hledat min a max souřadnice...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 21. duben 2008, 13:09:17    Předmět: Odpovědět s citátem

To záleží na tom, jestli jsou ty informace o AABB v tom modelu uloženy. A to zase záleží na tom, jaký je to formát atd. Když si to napíšeš sám, bude to asi nejjednodušší. A rychlosti bych se nebál -- je to jen pár triviálních operací na každý vrchol a když to porovnáš se samotným načítáním, je to podle mě zanedbatelné zpoždění.
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Deluxe



Založen: 31. 07. 2007
Příspěvky: 235
Bydliště: Oslavany

PříspěvekZaslal: 21. duben 2008, 15:42:37    Předmět: Odpovědět s citátem

Nevim jaky API pouzivas ale v MDX jsou na zjisteni bounding boxu nebo bounding sphere funkce:
kód:
Geometry.ComputeBoundingBox(data, d3dMesh.NumberVertices,
                            d3dMesh.VertexFormat, out minBound, out maxBound);
objectRadius = Geometry.ComputeBoundingSphere(
                            data, d3dMesh.NumberVertices, d3dMesh.VertexFormat,
                            out objectCenter);
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: 21. duben 2008, 15:58:40    Předmět: Odpovědět s citátem

Což jsou jen wrappery nad funkcemi D3DXComputeBoundingSphere a D3DXComputeBoundingBox.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 21. duben 2008, 20:35:59    Předmět: Odpovědět s citátem

Juraj napsal:
Potřebuj si vypočítat souřadnice např kvádru kolem vykresleného objektu, tak abych mohl testovat zda jsem náhodou neklik na daný objkt.

Osobně si myslím, že pro výpočet použiji nějaké body z world matice objectu, ale nevím jak dostat ty správné abych to mohl testovat při kliku na plátno.


Jestli ti jde o zjisteni na jaky objekt jsi kliknul tak bych doporucil "color picking". Zakladni myslenka je napr. zde: http://www.lighthouse3d.com/opengl/picking/index.php?color1

nebo jeste lepe zde: http://gpwiki.org/index.php/OpenGL_Selection_Using_Unique_Color_IDs

Je to presne a nemusis resit matematiku typu ray vs box/sphere.
Upravenou techniku pouzivam pro muj editor.


Naposledy upravil quas4 dne 22. duben 2008, 10:12:30, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 21. duben 2008, 20:37:53    Předmět: Odpovědět s citátem

Jak se začne přenášet AABB do jiných souřadnicových systémů, příchází problém - najednou máš OBB (oriented BB = AABB + rotation matrix) a tam ta matika je trochu složitější. Místo této komplikace bych ti doporučil transformovat 3D přímku do souřadnicového systému objektu a spočítat kolizi až tam. 3D přímkou myslím samozřejmě tu přímku, kterou generuje pozice myši mezi přední a zadní ořezávací rovinou.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 29. květen 2008, 14:13:18    Předmět: Odpovědět s citátem

Máte někdo trochu bližší zkušenosti s touto funkcí D3DXComputeBoundingBox (u me Geometry.ComputeBoundingBox)?

Jde mi o to, že mi vrací více nespecifikovaný error:
{"Došlo k pokusu o čtení nebo zápis v chráněné paměti. Zpravidla se jedná o indikaci, že došlo k poškození další paměti."}

Už jsem zkoušel kontrolovat parametry, prohazovat a postupne ladit a na nic jsem nepřišel. Pokaždé mi to tak na 2/3 případů proběhne v pořádku (tedy alespoň bez erroru) a 1/3 padá na tento error.

Pokud Vás něco napadá co bych měl zkontrolovat, nebo víte jak tako funkce uvnitř pracuje, dejte vědět.

Díky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 29. květen 2008, 14:39:44    Předmět: Odpovědět s citátem

mas tu Geometry spravne nainicializovanou - uvnitr bude urcite unmanaged objekt - neni to nahodou NULL pointer nebo neco co by ukazovalo do pryc?

a jinak vyplati se misto te hlasky znat jeji chybovy kod a nebo tu hlasku v anglictine - pak se da googlit - ceskou hlasku nevygooglis
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Deluxe



Založen: 31. 07. 2007
Příspěvky: 235
Bydliště: Oslavany

PříspěvekZaslal: 29. květen 2008, 15:27:19    Předmět: Odpovědět s citátem

No v jednom kodu ji pouzivam takhle:
kód:
                using (GraphicsStream data = d3dMesh.LockVertexBuffer(
                    LockFlags.None))
                    {
                        objectRadius = Geometry.ComputeBoundingSphere(
                            data, d3dMesh.NumberVertices, d3dMesh.VertexFormat,
                            out objectCenter);
                        if(objectRadius == 0.0f)
                            objectRadius = 0.01f;

                        Geometry.ComputeBoundingBox(data, d3dMesh.NumberVertices,
                            d3dMesh.VertexFormat, out minBound, out maxBound);

                        d3dMesh.UnlockVertexBuffer();
                    }

a funguje to dobre...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
if.then



Založen: 13. 04. 2008
Příspěvky: 579

PříspěvekZaslal: 29. květen 2008, 16:09:07    Předmět: Odpovědět s citátem

na VC++ 6.0 je dobrá kolizní knihovna ColDet... a hlavně FREE Laughing
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
Jdi na stránku Předchozí  1, 2, 3  Další
Strana 2 z 3

 
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