.[ ČeskéHry.cz ].
PhysX v realnem case

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Fyzikální modely
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
LukeMak



Založen: 08. 02. 2013
Příspěvky: 16

PříspěvekZaslal: 8. únor 2013, 23:57:54    Předmět: PhysX v realnem case Odpovědět s citátem

Ahoj,

zkousim PhysX a nedari se mi v realnem case simulovat scenu. Scenu mam vytvorenou, jde mi pouze o to jak spravne volat metody PxScene::simulate a PxScene::fetchResults. Zkousel jsem to podle dokumentace a podle samplu, ale nejak se v tom ztracim.

Mel jsem za to, ze kdyz budu volat 30x za sekundu metodu simulate s krokem 1/30, pak by mela simulace odpovidat realnemu casu. Simulaci mam ale velmi zpomalenou (mohu vynasobit uplynuly cas cca 10x, pak to vypada realneji ale potom mi to dela zase jine problemy, asi uz kvuli velkemu kroku pri integraci).

Ma prosim nekdo s PhysX zkusenosti a vedel by, jak spravne vyuzivat metody simulate, pripadne dalsich k simulaci v realnem case?

(Nemam nijak slozitou scenu... v podstate rovinu zeme a par kouli a krychli.)

Diky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 9. únor 2013, 08:35:45    Předmět: Odpovědět s citátem

Já to mám udělané tak, že framerate scény odpovídá 60, pak do simulace sypu 1/60. Vzal jsem kód přímo ze samplu.

kód:

float stepSize = 1.0f / 60.0f;
this->lastTime += dTime; //(dTime / 1000.0f);
if (this->lastTime < stepSize)
{      
   return false;
}
   
this->lastTime -= stepSize;
   
PhysXInstance::GetControllerManager()->updateControllers();
this->collisionWorld.world->simulate(stepSize);

//...perform useful work here using previous frame's state data       
while(!this->collisionWorld.world->fetchResults() )     
{
   // do something useful .. not used yet   
}


Jinak nevím co myslíš tím "zpomalené"... není to třeba tím, že prostě ta koule jenom pomalu padá, protože je moc lehká ?
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
frca



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

PříspěvekZaslal: 9. únor 2013, 08:42:51    Předmět: Odpovědět s citátem

Na hmotnost koule sere pes. Spíš bych zkontroloval gravitační zrychlení.
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
LukeMak



Založen: 08. 02. 2013
Příspěvky: 16

PříspěvekZaslal: 9. únor 2013, 09:50:47    Předmět: Odpovědět s citátem

Zjednodusil jsem to co nejvic to slo. Momentalne teda kazdej frame volam tuto funkci:
kód:
float mAccumulator = 0.0f;
float mStepSize = 1.0f/60.0 ;

bool advance(PxReal dt)
{
    mAccumulator += dt;
    if(mAccumulator < mStepSize)
    {
        return false;
    }
    mAccumulator -= mStepSize;

    gScene->simulate(mStepSize);
    while (!gScene -> fetchResults());
    return true;
}


Cas dt jako parametr mam v sekundach a je to cas od posledního volani advance funkce. Gravitacni zrychleni i hmotnosti mam nastavene spravne, problem je s tim zpomalenim je ve vsech smerech, nejen ve smeru gravitacni sily.

Kdyby Vas napadlo co delam spatne... Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Dlaha



Založen: 30. 07. 2007
Příspěvky: 598
Bydliště: Olomouc

PříspěvekZaslal: 9. únor 2013, 10:19:49    Předmět: Odpovědět s citátem

Možná poměr scény. Třeba Farseer, se kterým si teď hraji, používá metry. A podle velikosti těles počítá jejich mass a nevím na co všechno to ještě může mít vliv.

No a jednoduše když jsem chtěl mít na scéně čtverec 100x100 pixelů a stejně tak jsem to reprezentoval Farseeru, tak to pro něj bylo 100x100 metrů a všechny tělesa se chovaly špatně. Díky své mohutnosti zrychlovaly hrozně pomalu a v podstatě jsem asi zažil něco podobnýho, jako ty.

Ale Farseer je 2D fyzikální engine a nevím, jak PhysX funguje, je to jen taková idea.
_________________
Other Inside
Greenlitnuto!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 9. únor 2013, 11:20:54    Předmět: Odpovědět s citátem

perry napsal:
není to třeba tím, že prostě ta koule jenom pomalu padá, protože je moc lehká ?

Chudák Newton, opět dělá vývrtky v hrobečku.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
LukeMak



Založen: 08. 02. 2013
Příspěvky: 16

PříspěvekZaslal: 9. únor 2013, 12:49:48    Předmět: Odpovědět s citátem

Mem napsal:
perry napsal:
není to třeba tím, že prostě ta koule jenom pomalu padá, protože je moc lehká ?

Chudák Newton, opět dělá vývrtky v hrobečku.


To, ze na hmotnosti nezalezi jsem vedel, neuvedomil jsem si to ale prave vzhledem ke zmene meritka. Krychle (konkretni hustoty) 3x3x3cm 3cm nad zemi spadne za mnohem kratsi dobu nez 3x3x3 m krychle 3 m nad zemi. Problem byl teda v pomeru sceny, jak napsal Dlaha (a v tom, ze jsem nad tim moc nepremyslel Very Happy).

Diky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 9. únor 2013, 14:01:03    Předmět: Odpovědět s citátem

Mem napsal:
perry napsal:
není to třeba tím, že prostě ta koule jenom pomalu padá, protože je moc lehká ?

Chudák Newton, opět dělá vývrtky v hrobečku.


Nechápu proč... vzhledem k tomu, že tam můžou být nastevné i další síly odporu, tak pak je rozdíl, jestli váží "1kg nebo 1000kg".
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Poky



Založen: 29. 06. 2009
Příspěvky: 184
Bydliště: Písek / Plzeň

PříspěvekZaslal: 9. únor 2013, 15:02:11    Předmět: Odpovědět s citátem

perry napsal:
Mem napsal:
perry napsal:
není to třeba tím, že prostě ta koule jenom pomalu padá, protože je moc lehká ?

Chudák Newton, opět dělá vývrtky v hrobečku.


Nechápu proč... vzhledem k tomu, že tam můžou být nastevné i další síly odporu, tak pak je rozdíl, jestli váží "1kg nebo 1000kg".


Ani [url="http://cs.wikipedia.org/wiki/Odpor_prostředí"]odporové síly prostředí[/url] nepotřebují hmotnost.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 9. únor 2013, 15:30:28    Předmět: Odpovědět s citátem

Jupí, flamewar!

Ve vakuu je to jasné, prostě hmotnost nemá vliv. Ve vzduchu se nafouknutý balonek a "ocelový balonek" (tedy těžší) budou chovat značně odlišně. Wink Pokud odporová síla nezávisí na hmotnosti, tím spíš to ovlivňuje výsledek, protože se v součtu sil, které na hmotnosti záleží, objeví takový vetřelec.

Což je ovšem dost odvážné tvrzení na to, že jsem fyziku naposledy viděl před rokem. Razz

F = Fg - Fo
m . a = m . g - Fo
a = g - Fo/m

...ať už je Fo cokoliv.
_________________
https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 9. únor 2013, 16:39:24    Předmět: Odpovědět s citátem

Jelikož to zde máte víceméně blbě (buď uvažování či terminologie je úplně špatně, nebo obojí) - zde je malé How-To:

Ad gravitace:

Ve vakuu rozhodně hmotnost má vliv, co nemá vliv je prostředí - ve vakuu platí Newtonův gravitační zákon (a tedy gravitační síla - Gravitational force):
Fg = G * m1 * m2 / r^2
G - odpovídá gravitační konstantě 6,67*10^-11 m^3*kg^-1*s^-2
m1 - hmotnost prvního tělesa
m2 - hmotnost druhého tělesa
r - vzdálenost obou těles

Směr těchto sil je od tělesa 1 k tělesu 2 (síla působí na těleso 1) a od tělesa 2 k tělesu 1 (síla působí na těleso 2).

(pozn. pro extrémní podmínky - rychlosti blížící se rychlosti světla - tento zákon selhává, a je třeba použít zákon obecnější - relativistický (který je matematicky mnohem komplikovanější) ... pro nízké rychlosti (rozuměj v^2/c^2 je řádově menší než 0.1) se rovná tomuto vztahu).

Pokud do vztahu dosadíme hmotnost země za m1, a za r poloměr naší planety, bude odpovídat Fg = g * m2, kde g (gravitační zrychlení) odpovídá 9.8066 m/s^2

Dále uvažujme že se nacházíme na planetě (například na zemi), jinak nemá smysl mluvit o prostředí a bude nám stačit výše uvedená rovnice a zákon akce-reakce.

Ad prostředí:

Prostředí jiné než vakuum vše komplikuje. Za prvé je třeba si definovat co je prostředím. Jelikož kapaliny a plyny se fyzikálně chovají obdobně (nejsou schopny udržet tvar, díky vzájemnému pohybu částic), zjednodušme jejich definici na tekutiny, to bude naším prostředím.

Částice v tomto prostředí se neustále pohybují, což znamená že do těles uvnitř tohoto prostředí neustále narážejí a budou na něj působit tlakové síly.

Teď si definujme naše tělesa, pro jednoduchost je definujme jako nedeformovatelná pevná tělesa.

Na všechna tyto tělesa (ať v pohybu či v klidu) bude působit statická vztlaková síla (Static buyonancy force). Ta je dána vztahem
Fb = V * d * g
V - objem části tělesa uvnitř daného prostředí
g - Gravitační zrychlení planety
d - hustota daného prostředí

Směr této síly je vždy proti gravitační síle planety.

Na všechna tělesa v pohybu bude působit také dynamická vztlaková síla. Při pohybu tělesa, samo těleso působí silou na své prostředí (tím jak jej "proráží"), prostředí samozřejmě dle 3. Newtonova zákona (zákon akce-reakce) působí silou proti tomuto pohybu. Přesné výpočty této síly jsou poměrně velmi složité (a často pouze numericky aproximovány), pro jednoduchost nám však postačí spočítat odporovou sílu pomocí Newtonova vztahu, ten je definován jako:
L = 0.5 * C * d * A * v^2
C - je součinitel odporu (obvykle se spočte na základě měření), pár jich je na http://en.wikipedia.org/wiki/Drag_coefficient
d - je hustota daného prostředí
A - je plocha průřezu kolmo proti směru pohybu
v - je rychlost tělesa

Směr této síly je vždy proti směru samotného pohybu tělesa.

Výsledná síla působící na těleso je vektorovým součtem všech sil na těleso působící. Tedy tyto síly sečteme, a z 1. Newtonova zákona spočteme zrychlení:
a = F / m
F - je síla působící na těleso
a - zrychlení tělesa
m - hmotnost tělesa

A dle toho upravíme každý integrační krok rychlost tělesa
v = v + a * dt
v - rychlost
a - zrychlení
dt - čas uběhlý od posledního výpočtu

A dle toho upravíme také pozici tělesa
p = p + v * dt
p - pozice tělesa
v - rychlost
dt - čas uběhlý od posledního výpočtu

Tento základní model vám postačí pro velmi realistické výsledky (s dostatečným systémem řešící kolize a reakci na ně, ten je obdobné triviální). Umožňuje tělesům v tekutinách plavat, potápět se, etc. Umožňuje psát vesmírné simulátory např. vesmírné střílečky, arkády, etc. (nebudete li v nich létat rychlostmi blížícím se rychlosti světla), umožňuje realistické balistické křivky pro střelbu, atd.

Ostatně je založený na skutečných reálných rovnicích, které jsou navíc velmi triviání (nějaké násobení, sčítání a sem tam dělení).
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
Poky



Založen: 29. 06. 2009
Příspěvky: 184
Bydliště: Písek / Plzeň

PříspěvekZaslal: 9. únor 2013, 17:57:14    Předmět: Odpovědět s citátem

Sorry za ten FW ale tohle mi nedá Smile

citace:
Ve vakuu rozhodně hmotnost má vliv
blbost, viz:

Gravitační síla (uvažujeme vzdálenosti mnohem menší než poloměr země) je Fg = m * g

a ve vakuu kde nepůsobí jiné síly je :
kód:
a = F / m = Fg / m = m * g / m = g
... a hle hmotnost vypadla, protože g už je samo gravitační zrychlení (jak už sám název napovídá)

Takže ve vakuu spadne 1kg železa uplně stejně rychle jako jedno pírko vypuštěné ze stejné vzdálenosti se zrychlením daném g.

Zato prostředí to malinko komplikuje a to právě těma silama co si popsal, takže pravda, že pro výpočet zrychlení v jiném prostředí než ve vakuu, už hmotnost hraje roli. Smile

EDIT:
citace:
(uvažujeme vzdálenosti mnohem menší než poloměr země)
- jo tím sem myslel vzdálenosti od povrchu Země, tam lze zanedbat ten rozdíl a uvažovat r pouze jako poloměr Země.

Naposledy upravil Poky dne 10. únor 2013, 11:36:05, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 9. únor 2013, 19:22:41    Předmět: Odpovědět s citátem

citace:
Gravitační síla (uvažujeme vzdálenosti mnohem menší než poloměr země) je Fg = m * g

Ve vzdálenosti menší než poloměr země se gravitační konstanta také mění, dokonce lineárně klesá vzhledem ke klesající vzdálenosti ke středu země. Měl jsi na mysli vzdáleností blízké povrchu země.

V takové situaci platí to co jsem napsal:
Fg = G * m1 * m2 / r^2

Dosaďme si:
Fg = 6,67*10^-11 * 5,9736×10^24 * m2 / 6378000^2
Fg = 9.7947 * m2

kde "tíhové zrychlení" je 9.7947 m/s^2

Pokud uvážíš že jsi v stejné výšce nad povrchem země jako je poloměr země, tíhové zrychlení je rovno cca 2.4486 m/s^2

Tíhové zrychlení je závislé na hmotnosti tělesa které tě přitahuje! Je závislé také na vzdálenosti od něj. Gravitační síla je pak závislá i na tvé hmotnosti (vyplívá ze zákonu F=m*a). Samozřejmě pro vzdálenosti menší než poloměr země bude ag = G * m1 / r^2 = g se jevit konstantní, ale je závislé na hmotnosti (ne samotného tělesa, ale planety).

Ale pozor ZRYCHLENÍ není rovno SÍLE. Síla je VŽDY závislá na hmotnosti.

Tvou rovnicí jsi pouze dokázal že g můžeme substituovat za a, což je jednoduchý fakt.
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
TeaTime



Založen: 17. 06. 2011
Příspěvky: 264

PříspěvekZaslal: 10. únor 2013, 23:33:12    Předmět: Odpovědět s citátem

Jen dodám, že i když budeme považovat vzdálenost těles a hmotnost těžšího tělesa za konstantní, tak stejně bude relativní zrychlení těles vůči sobě záviset na hmotnosti lehčího tělesa. Graitační zákon 'Fg = G * m1 * m2 / r^2' je totiž nutné aplikovat na obě tělesa. Jak ostatně uvádí Vilém: "Směr těchto sil je od tělesa 1 k tělesu 2 (síla působí na těleso 1) a od tělesa 2 k tělesu 1 (síla působí na těleso 2). ". Tudíž pokud je hmotnost planety m1 konstantní a vzdálenost tělesa od planety také konstantní, tak je zrychlení předmětu směrem k planetě také konstantní. Ale stále se může měnit zrchylení planety směrem k tělesu (v závislosti na hmotnosti tělesa m2).

Běžně se zrychlení na Zemi považuje za konstantní, protože vzdálenost těles od Země je pořád skoro stejná a hmotnost lehčího tělesa je ve srovnání s hmotností Země zanedbatelná. Jak k tomu fyzikální engine přistoupí a co všechno vlastně bude zanedbávat záleží ale na 'druhu' gravitačního pole, se kterým počítá - něco jiného to bude pro FPS a něco jiného pro vesmírnou strategii. A kydž se nám herní model vymkne běžným zvyklostem příliš, tak bude nutné počítat třeba i s teorií relativity.
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 -> Fyzikální modely Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
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