.[ ČeskéHry.cz ].
Skeletální animace+VBO+GLSL
Jdi na stránku Předchozí  1, 2, 3
 
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
HonzikJ



Založen: 04. 02. 2010
Příspěvky: 21

PříspěvekZaslal: 30. říjen 2011, 10:25:57    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 30. říjen 2011, 10:50:34    Předmět: Odpovědět s citátem

A jak že počítáš ty OBB?
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
HonzikJ



Založen: 04. 02. 2010
Příspěvky: 21

PříspěvekZaslal: 30. říjen 2011, 10:52:14    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 30. říjen 2011, 11:12:21    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
HonzikJ



Založen: 04. 02. 2010
Příspěvky: 21

PříspěvekZaslal: 30. říjen 2011, 11:17:26    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
igor



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

PříspěvekZaslal: 30. říjen 2011, 11:22:53    Předmět: Odpovědět s citátem

No a nejde ty OBB spočítat jednou a pak je transformovat úplně stejně jako vertexy?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 30. říjen 2011, 11:24:04    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
HonzikJ



Založen: 04. 02. 2010
Příspěvky: 21

PříspěvekZaslal: 30. říjen 2011, 11:31:11    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
igor



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

PříspěvekZaslal: 30. říjen 2011, 11:44:32    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
if.then



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

PříspěvekZaslal: 30. říjen 2011, 13:10:48    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
HonzikJ



Založen: 04. 02. 2010
Příspěvky: 21

PříspěvekZaslal: 30. říjen 2011, 15:38:37    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
if.then



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

PříspěvekZaslal: 30. říjen 2011, 17:21:54    Předmět: Odpovědět s citátem

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
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
Strana 3 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