Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
HonzikJ
Založen: 04. 02. 2010 Příspěvky: 21
|
Zaslal: 30. říjen 2011, 10:25:57 Předmět: |
|
|
Aha takže jestli tomu rozumím dobře, tak kdybych například vystřelil na model, tak by výpočet mohl být následovně?
1. projdu viditelné AABB modelů (každý model mám obalen jedním AABB)
2. za předpokladu, že jsem nějaký AABB zasáhl, spočtu OBB modelu pro aktuální frame animace
3. zjistím jestli jsem protl některý OBB
4. pokud ano - nastala kolize (popřípadě ještě bych mohl projít všechny trojúhelníky pro daný OBB pro přesnější výsledek)
Akorát mě právě zajímalo, zda to nejde nějak udělat tak, že spočtu OBB pro první frame (při loadingu nebo získám ze souboru) a pak si v případě, kdy to budu potřebovat dopočtu pozice OBB třeba pro frame 10 z výchozích pozicí z framu 1, jelikož ten výpočet OBB je docela složitý. Nevím jestli jsem to napsal zcela srozumitelně, ale snad ano. |
|
Návrat nahoru |
|
 |
VODA

Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 30. říjen 2011, 10:50:34 Předmět: |
|
|
A jak že počítáš ty OBB? _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
 |
HonzikJ
Založen: 04. 02. 2010 Příspěvky: 21
|
Zaslal: 30. říjen 2011, 10:52:14 Předmět: |
|
|
VODA napsal: |
A jak že počítáš ty OBB? |
Z kovarianční matice spočítám vlastní vektory a hodnoty, z čehož pak určím střed, hlavní osy a velikost |
|
Návrat nahoru |
|
 |
VODA

Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 30. říjen 2011, 11:12:21 Předmět: |
|
|
A není náhodou ten výpočet složitý právě díky tomu?
Abych pravdu řekl, tak mi ten pojem kovariantní matice, nic moc neříká, ale už jen z hlediska výpočtu vlastních čísel a vektorů bych typoval, že to nebude to pravé ořechové... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
 |
HonzikJ
Založen: 04. 02. 2010 Příspěvky: 21
|
Zaslal: 30. říjen 2011, 11:17:26 Předmět: |
|
|
VODA napsal: |
A není náhodou ten výpočet složitý právě díky tomu?
Abych pravdu řekl, tak mi ten pojem kovariantní matice, nic moc neříká, ale už jen z hlediska výpočtu vlastních čísel a vektorů bych typoval, že to nebude to pravé ořechové... |
No to je jasné, že výpočet je tak složitý právě kvůli těmto výpočtům, ale jak jinak vypočítat OBB, já jsem alespoň jiné řešení nenašel bohužel... |
|
Návrat nahoru |
|
 |
igor

Založen: 28. 07. 2007 Příspěvky: 196
|
Zaslal: 30. říjen 2011, 11:22:53 Předmět: |
|
|
No a nejde ty OBB spočítat jednou a pak je transformovat úplně stejně jako vertexy? |
|
Návrat nahoru |
|
 |
VODA

Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 30. říjen 2011, 11:24:04 Předmět: |
|
|
No a co třeba při načtení modelu (grafická data + bind pose skeleton), si vytvořit pole AABB podle početu kostí, pak jen projít lineárně vrcholy, transformovat je inverzní maticí s největší váhou (nebo klidně všema) a tímto vertexem rozšířit AABB podle indexu kosti s největší váhou (nebo opět rozšířit podle všech). Tím dostaneš rozměry OBB. Pak stačí jen nastavovat OBB pozici a rotaci podle interpolovaného skeletonu a pokud se nepletu, tak by to mělo fungovat.
EDIT: Snad jsem to vysvětlil alespoň trochu srozumitelně...
EDIT2: Jak říká igor. _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
 |
HonzikJ
Založen: 04. 02. 2010 Příspěvky: 21
|
Zaslal: 30. říjen 2011, 11:31:11 Předmět: |
|
|
igor napsal: |
No a nejde ty OBB spočítat jednou a pak je transformovat úplně stejně jako vertexy? |
Přesně tak jsem se to snažil udělat, na začátku jsem si spočetl OBB a pak jsem v každém kroku pro každý joint pronásobil OBB maticí jointu (stejně jako vertexy), bohužel výsledek je, že se to celé rozhaší a jsou viditelné pouze jakési podivné útvary.
Nicméně jestli říkáte, že by to takto mělo fungovat i já si to myslím, protože defacto ten OBB je pouze aproximace části modelu, provedením transformace pro dané vertexy by měla být použitelná i pro OBB. Patrně mám někde chybu. |
|
Návrat nahoru |
|
 |
igor

Založen: 28. 07. 2007 Příspěvky: 196
|
Zaslal: 30. říjen 2011, 11:44:32 Předmět: |
|
|
Zkus zkontrolovat, jestli ty výpočty sedí, může tam být průser, že ty OBB jsou spočítané v jiném prostoru než ty vertexy, pokud tam něco reprezentuješ pomoci vektorů, tak nemají nastavenou w souřadnici na 0 apod. |
|
Návrat nahoru |
|
 |
if.then
Založen: 13. 04. 2008 Příspěvky: 579
|
Zaslal: 30. říjen 2011, 13:10:48 Předmět: |
|
|
Mám dojem, že OBB musí v tomto případě odfiltrovat jen malou část false intersects, takže by IMHO bylo lepší buď objekt vybrat už po AABB (pokud děláš picking), nebo udělat per-triangle kolizi... (A nebo, což by bylo asi nejlepší, aproximovat model pomocí různých primitiv (koule, kapsle atd.), ty připojit na kosti a provést raycast s nimi - něco jako model pro ragdoll). _________________ For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++. |
|
Návrat nahoru |
|
 |
HonzikJ
Založen: 04. 02. 2010 Příspěvky: 21
|
Zaslal: 30. říjen 2011, 15:38:37 Předmět: |
|
|
if.then napsal: |
Mám dojem, že OBB musí v tomto případě odfiltrovat jen malou část false intersects, takže by IMHO bylo lepší buď objekt vybrat už po AABB (pokud děláš picking), nebo udělat per-triangle kolizi... (A nebo, což by bylo asi nejlepší, aproximovat model pomocí různých primitiv (koule, kapsle atd.), ty připojit na kosti a provést raycast s nimi - něco jako model pro ragdoll). |
Tak chybka byla v transformaci, sem si neuvědomil u těch OBB co se vlastně mění, až když jsem si to rozfázoval, tak mi došla zcela jasná věc:
1. střed OBB se mění při posunutí
2. osy OBB se mění při rotaci
3. velikost zůstává zachována
já jsem na body 1. a 2. aplikoval stejnou matici jako pro vertex, čili posunutí i rotaci pro obě, což dávalo šparné výsledky. Nyní je vše v pořádku. |
|
Návrat nahoru |
|
 |
if.then
Založen: 13. 04. 2008 Příspěvky: 579
|
Zaslal: 30. říjen 2011, 17:21:54 Předmět: |
|
|
Když měníš transformaci kostí, tak se velikost OBB mění... just saying _________________ For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++. |
|
Návrat nahoru |
|
 |
|