Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 22. srpen 2007, 20:45:51 Předmět: Kolize se třením |
|
|
Zdravím,
jak je složité naimplementovat tuto simulaci vzhledem ke kolizím bez tření? Jde mi o to, jestli se tím vůbec zabývat, jestli mám šanci to stvořit, resp. jestli se tady vychází z kolizí bez tření a jen se něco přidá.
Díky |
|
Návrat nahoru |
|
|
tangent
Založen: 28. 07. 2007 Příspěvky: 28
|
Zaslal: 22. srpen 2007, 21:23:49 Předmět: |
|
|
Taky jsem si pokladal podobnou otazku a jsem zvedavy na odpoved. Uz mam totiz delsi v bookmarksech "k precteni" tenhle clanek na gamasutre o kontaktni fyzice..
http://www.gamasutra.com/resource_guide/20030121/kennedy_pfv.htm
..ale ne a ne se k tomu dostat , tak jsem zevedavy jestli me nekdo namotivuje ci odradi |
|
Návrat nahoru |
|
|
Fila
Založen: 31. 07. 2007 Příspěvky: 853
|
Zaslal: 23. srpen 2007, 13:38:13 Předmět: |
|
|
Zalezi dost jak je napsano jadro simulace (pouzivas numerickou integraci? semiimplicitni nebo explicitni? nebo to mas nejak "uvarene na miru" (to jde spis tak ve 2D)?).
Obecne s trenim neni zadna prdel, zvlast kdyz ma byt presnejsi (treba u zavodni hry vlastnosti pneumatik) -- tady bych spis sahl po existujicim reseni, napr. ODE nebo PhysX. |
|
Návrat nahoru |
|
|
Strana
Založen: 31. 07. 2007 Příspěvky: 2 Bydliště: Olomouc / Brno
|
Zaslal: 23. srpen 2007, 18:28:24 Předmět: |
|
|
Nedávno jsem se na to trochu díval, ODE to řeší zajímavě. Umí simulovat tuhá tělesa pospojovaná různými klouby a pro každou kolizi si vytváří speciální kloub, který ty tělesa na 1 "krok herního světa" vlastně přichytí k sobě (nastavíš jak pevně pomocí vlastností povrchu těch těles).
Je to trochu popsané tady - http://www.ode.org/ode-latest-userguide.html.
sekce 3.9 - 3.11 a 7.3.7
Potom co jsem tím user guide letmo prošel bych se teda do něčeho podobného na vlastní pěst určitě nepouštěl _________________ Stráňa
"Lidstvo je ještě v betatestu." |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 23. srpen 2007, 19:39:56 Předmět: |
|
|
A já jsem myslel, že se jenom nějak spočítá tangenciální impuls a použije se nějak pro změnu rychlostí. |
|
Návrat nahoru |
|
|
Sun Wu Kung
Založen: 14. 08. 2007 Příspěvky: 7
|
Zaslal: 24. srpen 2007, 11:24:30 Předmět: |
|
|
Určitě se tím zabývej.
Záleží na tom, jakým způsobem zajišťuješ pohyb těles. Tření většinou vyjadřujeme jako třecí sílu. Takže abys ji mohl správně zapojit, musíš k pohybu tělesa používat sil.
Numerická integrace, vychází ze součtu všech sil působících na těleso. Dostaneš výslednou sílu a po vydělení hmotností i její zrychlení. Právě tohle zrychlení vynásobíš časovou změnou dt (aktuálním časovým rozdílem mezi dvěma smyčkami programu). Dostaneš změnu rychlosti. (Z toho vyplývá, že když na těleso žádná síla nepůsobí, rychlost tělesa se nemění)
Rychlost oproti minulé pozici upravíš a vypočítáš změnu pozice pomocí stejné časové změny.
Příklad v rovině:
Vyslednice.X = TihovaSila.X + HnaciSila.X+TreciSila.X
Vyslednice.Y = TihovaSila.Y + HnaciSila.Y+TreciSila.Y
a.X = Vyslednice.X/hmotnost
a.Y = Vyslednice.Y/hmotnost
v.X = v.X + (a.X)x(dt)x(nějaké měřítko)
v.Y = v.Y + (a.Y)x(dt)x(nějaké měřítko)
Pos.X = Pos.X + (v.X)xdt
Pos.Y = Pos.Y + (v.Y)xdt
Takhle nějak vypadá numerická integrace a takhle musíš tělesy hýbat, abys mohl třecí sílu implementovat. A to ještě chybí momenty sil otáčející tělesem.
Velikost třecí síly je definována jako součin velikosti normálové reakce a součinitele tření - ten si definuješ ty podle charakteru povrchu.
Působiště třecí síly je bodě dotyku tělesa s podložkou. Pokud to je plocha, třecí síla je v těžišti.
Směr vektoru třecí síly je opačný oproti směru vektoru rychlosti.
Tohle je dobrý způsob, protože ti umožňuje dělat s tím spoustu dalších věcí. Ale jestli to chceš udělat nějak...
... tak si zjistíš kolizní normálu, k ní určíš kolizní plochu (nebo přímku ve 2D) do ní promítneš vektor rychlosti -> dostaneš složku rychlosti v tečném směru a tu upravíš. např:
vt = vt * 0.9
prostě ji zmenšíš. Vektor musíš zpátky převést (nebo nemusíš, nevím jak to máš řešené. Rychlost v normálovém směru můžeš třeba vynulovat, protože to je rychlost, která míří do překážky - těleso narazilo a zastavilo se, nebo ji můžeš obrátit -těleso narazilo a odrazilo se)
[EDIT] Před pádem CH byl v magazínu seriál o podobné tematice.
Naposledy upravil Sun Wu Kung dne 24. srpen 2007, 11:46:20, celkově upraveno 1 krát |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 24. srpen 2007, 11:39:40 Předmět: |
|
|
To je myslím popis kolizí bez tření, jenom s vyzářením energie nedokonale pružným odrazem. Tím třením se myslí spíš něco jako např. tření o zeď při pohybu podél zdi. Určitě by šlo naklást spousty podmínek pro zjištění pohybu podél zdi, ale jsem přesvědčený, že existuje obecnější řešení, kde se tření projeví vždy, ale někdy méně. |
|
Návrat nahoru |
|
|
Sun Wu Kung
Založen: 14. 08. 2007 Příspěvky: 7
|
Zaslal: 24. srpen 2007, 11:57:35 Předmět: |
|
|
Obecné řešení je právě ona pohybová rovnice, kam třecí sílu přidáš pokaždé, když ke tření dochází (když koliduješ) a její velikost závisí na tom, jak moc tlačíš na překážku (normálová reakce).
Příklad:
Auto najede šikmo na zeď a pokračuje dál podél stěny o níž dře bokem.
Auto má na začátku vektor rychlosti, který svírá se stěnou úhel třeba třicet stupňů. V místě srážky (kolizní bod) odečteš od vektoru rychlosti normálovou složku.
Vektor rychlosti pak bude rovnoběžný se stěnou. Do pohybové rovnice přidáš třecí sílu (protože jsi vyhodnotil kolizi) a budeš jí tam mít tak dlouho, dokud auto podél stěny jede - tj dokud budeš vyhodnocovat kolizi. Důsledkem tření pak bude změna rychlosti.
Příklad je samozřejmě zjednodušený, musíš počítat i momenty sil a auto není zrovna ideální objekt. Ale můžeš si to představit na kouli a ploše. |
|
Návrat nahoru |
|
|
Fila
Založen: 31. 07. 2007 Příspěvky: 853
|
Zaslal: 24. srpen 2007, 12:17:47 Předmět: |
|
|
frca -- co pises za aplikaci? Pokud budes potrebovat jointy (klouby propojujici telesa), docela se nadres, jestli to zacnes psat sam. A pokud budes mit vyssi pozadavky na stabilitu (tzn. napr. aby se kulicka zapadla do dulku ustalila a nezacla tam poskakovat), nebude ti stacit zpusob jaky tu popisuje Sun Wu Kung. |
|
Návrat nahoru |
|
|
Sun Wu Kung
Založen: 14. 08. 2007 Příspěvky: 7
|
Zaslal: 24. srpen 2007, 12:34:28 Předmět: |
|
|
To je pravda. |
|
Návrat nahoru |
|
|
Tomas_Dejmek
Založen: 28. 07. 2007 Příspěvky: 7 Bydliště: Visual studio
|
Zaslal: 24. srpen 2007, 14:01:33 Předmět: |
|
|
Sice jsem todle nikdy neprogramoval, ale mám otom představu, myslím že na to jdete moc složitě, pokud autro topicu dělá nějakou hru kde budou zdi a třeba i stoli... a né nějaký rychlý auta co se osebe třískaj... tak to jde celkem jednoduše.
Tady máte článek, dokonce v češtině http://monade.cz/Item.php?item=4 Je to sice na kameru, ale snad neni problém to dát na model či mesh.
PS: tady je pak ten výsledek http://monade.cz/Item.php?item=5
Tak good luck |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 24. srpen 2007, 14:05:42 Předmět: |
|
|
To, co dělám, je tak jednoduché, že tam žádné jointy a nestabilita nehrozí. Mám to ve 2D. K těm slovním popisům, pro mě by bylo přijatelnější to popsat vzorcem. Díky. |
|
Návrat nahoru |
|
|
Sinuhet
Založen: 25. 08. 2007 Příspěvky: 5
|
Zaslal: 25. srpen 2007, 15:02:52 Předmět: |
|
|
No něco už ti tady napsal Sun Wu Kung... to jsou vzorce. Anebo by bylo lepší napsat co chceš nasimulovat. Protože takhle obecný problém můžeš řešit jen obecnými rovnicemi. |
|
Návrat nahoru |
|
|
Sun Wu Kung
Založen: 14. 08. 2007 Příspěvky: 7
|
Zaslal: 27. srpen 2007, 12:30:30 Předmět: |
|
|
Mělo by to vypadat nějak takhle?
Je to splácaný na rychlo.
Ovládá se to šipkami, enter spouští/stopuje timer.
http://www.couf.wz.cz/AlfaProject3x6.zip
(300 kB) |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 27. srpen 2007, 13:06:33 Předmět: |
|
|
Ano, asi nějak tak. Škoda jen, že nejde vidět otáčení objektu, když je kruhový. |
|
Návrat nahoru |
|
|
|