Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Juraj

Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 7. srpen 2008, 17:21:55 Předmět: Bounding box - rotace |
|
|
Zdravím Vás,
po delší době samostatného bádání se na Vás opět obracím s dotazem. Pro výpočty kolizí využívám již zmíněný bounding box. Který lze jak asi každý "zasvěcený" ví vyjádřit dvěma vectory 3D, např min a max.
Postup je asi následovný, vypočtu si min a max, tyto vectory transformuji:
1) posunem objektu
2) zvetsenim objektu
a můj dotaz je jak na bounding box (min, max) aplikovat rotaci objektu, např že vím že objekt je otočený v ose x o 270 stupňů a já potřebuji i takto natočit pomyslný box.
Díky moc, nějak na to nemohu přijít  |
|
Návrat nahoru |
|
 |
Augi

Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 7. srpen 2008, 17:32:42 Předmět: |
|
|
Teda...moc to nechápu...ale jestli používáš pro popis bounding boxu jen min a max, tak se vlastně jedná o axis-aligned bounding box (AABB) a ten jak z názvu vyplývá musí mít hrany zarovnané s osami.
Takže pokud chceš mít nějak obecně natočený BB, musíš ho popsat více parametry než minimem a maximem. |
|
Návrat nahoru |
|
 |
Juraj

Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 7. srpen 2008, 19:17:24 Předmět: |
|
|
Augi napsal: |
Teda...moc to nechápu...ale jestli používáš pro popis bounding boxu jen min a max, tak se vlastně jedná o axis-aligned bounding box (AABB) a ten jak z názvu vyplývá musí mít hrany zarovnané s osami.
Takže pokud chceš mít nějak obecně natočený BB, musíš ho popsat více parametry než minimem a maximem. |
Tak nyní jsi mi v něčem, v čem jsem si myslel že mám jasno, udělal nějak zmatek
Tak abych se vice rozepsal, muj box (ted nevim jaky) mam definovany min a max, ale tyto promene jsou typu vector3, takze je definovany 6 hodnotami:
min x,y,z
max x,y,z
snad to takto stačí.. |
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 7. srpen 2008, 19:38:41 Předmět: |
|
|
K tomu abys mohl ovládat rotaci bounding boxu budeš muset použít OBB - neboli Oriented bounding box.
Ten bych doporučoval definovat pomocí 2 3D bodů - min a max + rotační matice. Rotuje se většinou okolo středového bodu oriented bounding boxu, popř. můžeš definovat další 3d bod, okolo kterého se rotuje - tzv. Pivot point. Myslím že pro kolize objektů to není zas až tak moc - 2* 3 floaty (min + max), 3*3 float matice rotační + 3 floaty jako pivot = 18 floatů na bounding box (to není IMHO tak velký memory storage). Samozřejmě jde definovat i dalšímy způsoby.
Tedy pokud s tím nechceš zrovna provádět ray tracing v reálném čase.
Jinak ke kolizím bych AABB nedoporučoval tolik jako OBB (teď se ozve plno lidí, že používá AABB a jsou skvělé - jde pouze o můj vlastní názor a doporučení). AABB spíše najde využití při ray tracingu. _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
posila
Založen: 29. 07. 2007 Příspěvky: 201
|
Zaslal: 7. srpen 2008, 19:39:54 Předmět: |
|
|
Možná ti poradí článek na wiki |
|
Návrat nahoru |
|
 |
Augi

Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 7. srpen 2008, 19:46:42 Předmět: |
|
|
Juraj napsal: |
Tak abych se vice rozepsal, muj box (ted nevim jaky) mam definovany min a max, ale tyto promene jsou typu vector3, takze je definovany 6 hodnotami:
min x,y,z
max x,y,z |
Jo, tohle je přesně AABB a ze své definice nemůže být orotován (protože je zarovnaný s osami). Když chceš mít BB libovolně natočený, tak musíš použít oriented BB, jak psal Vilem Otte. To znamená, že budeš muset přidat informaci o rotaci (jak psal VO). |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 8. srpen 2008, 10:16:33 Předmět: |
|
|
Jo, je to na tý Wiki. Natočený boxy jsou trochu těší, ale stojí za to.
Jestli chceš orotovat AABB (to je to co máš) a udělat z něho nový AABB, tak musíš:
vzít 8 bodů:
[min.x min.y min.z]
[max.x min.y min.z]
[min.x max.y min.z]
[max.x max.y min.z]
[min.x min.y max.z]
[max.x min.y max.z]
[min.x max.y max.z]
[max.x max.y max.z]
Tyto transformovat onou transformační (rotační v tvém přpadě) maticí
a získáš nových 8 bodů. U nich najdeš nová minima a maxima a máš nový AABB. Bohužel už nebude tak hezky obalovat původní objekt, ale bude aspoň splňovat vlastnost, že objekt obaluje a tudíž se dá použít pro kolize - byť nepřesné. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 8. srpen 2008, 10:26:46 Předmět: |
|
|
OT:
kde na tý wiki najdu oněch 128 článků? k tomu koliznímu se dá dostat jen přes odkaz co psal posila, nebo sem "slepej". _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 8. srpen 2008, 11:31:18 Předmět: |
|
|
OT:
Pracuju na tom. Jinak vlevo Speciální stránky a potom Všechny stránky. _________________ Mám strach |
|
Návrat nahoru |
|
 |
Juraj

Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 9. leden 2009, 13:44:26 Předmět: |
|
|
Tak nyní potřebuji pomoc někoho kdo se v matematice vyzná lépe než já..
Mám 2 objekty, každý je definovaný 8 body, 3DVectory. Takže by se dalo říci že se jedná o nějaký kvádr kolem objektu, ne však nutně tvar kvádru. Objekty tedy vypadají takto:
obj1:
obj1.a1 (Vector3)
obj1.b1 (Vector3)
obj1.c1 (Vector3)
obj1.d1 (Vector3)
obj1.a2 (Vector3)
obj1.b2 (Vector3)
obj1.c2 (Vector3)
obj1.d2 (Vector3)
obj2:
obj2.a1 (Vector3)
obj2.b1 (Vector3)
obj2.c1 (Vector3)
obj2.d1 (Vector3)
obj2.a2 (Vector3)
obj2.b2 (Vector3)
obj2.c2 (Vector3)
obj2.d2 (Vector3)
Nyní potřebuji vypočítat kolizi 2 objektů mezi sebou. Můžete mi někdo přímo poradit nebo zaslat odkaz na nějaké obdobné řešení? Nejsem v kolizních výpočtech nijak zběhlý a chtěl bych nějaké optiální ne zbytečně náročné řešení.
Díky všem  |
|
Návrat nahoru |
|
 |
Kaemon
Založen: 28. 07. 2007 Příspěvky: 33
|
|
Návrat nahoru |
|
 |
|