Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Jorns
Založen: 27. 08. 2013 Příspěvky: 14
|
Zaslal: 22. leden 2014, 23:45:25 Předmět: Pohyb auta (GL) |
|
|
Ako riesite pohyb auta v 2D ? Napriklad ako v gta 2 teda pohlad zhora?
Podla mna by to slo aj sinusom a kosinusom, ten sposob pomocou gltranslate a glrotate je prapodivny, a k tomu nechcem hybat celou scenou. Je potrebne hybat len tym vozidlom,ako sa k tomu stavite vy ? |
|
Návrat nahoru |
|
|
Vilem Otte
Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 23. leden 2014, 00:09:28 Předmět: |
|
|
Pohyb auta je relativně složitá věc a nedoporučuji ať jej řešíš animací a transformacemi. Správné řešení je použít fyzikální engine.
Tady je video-ukázka z mého řešení - http://www.youtube.com/watch?v=aCHBc2PAJbw
Prakticky to vyřešíš tak, že máš ve fyzikálním modelu motor, který se neustále točí (je-li zapnutý) s určitým točivým momentem, tento předáváš např. na přední kola (zrychluješ-li), nebo nepředáváš (nezrychluješ). Kola jsou válce, kterým můžeš nastavit úhel vzhledem ve vertikální ose auta (tj. otáčení vlevo a vpravo). Jsou spojeny s autem pomocí "kloubu" - a tím "táhnou" auto.
Ve videu jsem na auto použil o něco složitější model, takže simuluje i hydrauliku, nicméně máš-li solidní fyzikální engine, je to relativně snadné na napsání, oproti přemýšlení nad transformacemi. _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
|
Jorns
Založen: 27. 08. 2013 Příspěvky: 14
|
Zaslal: 23. leden 2014, 00:26:24 Předmět: |
|
|
Vilem Otte napsal: |
Pohyb auta je relativně složitá věc a nedoporučuji ať jej řešíš animací a transformacemi. Správné řešení je použít fyzikální engine.
Tady je video-ukázka z mého řešení - http://www.youtube.com/watch?v=aCHBc2PAJbw
Prakticky to vyřešíš tak, že máš ve fyzikálním modelu motor, který se neustále točí (je-li zapnutý) s určitým točivým momentem, tento předáváš např. na přední kola (zrychluješ-li), nebo nepředáváš (nezrychluješ). Kola jsou válce, kterým můžeš nastavit úhel vzhledem ve vertikální ose auta (tj. otáčení vlevo a vpravo). Jsou spojeny s autem pomocí "kloubu" - a tím "táhnou" auto.
Ve videu jsem na auto použil o něco složitější model, takže simuluje i hydrauliku, nicméně máš-li solidní fyzikální engine, je to relativně snadné na napsání, oproti přemýšlení nad transformacemi. |
Mne ale staci zatial len ten pohyb, ziadna fyzika okolo toho, ale ak na to nedas tak ktory pouzivas physX ? |
|
Návrat nahoru |
|
|
Vilem Otte
Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 23. leden 2014, 03:51:23 Předmět: |
|
|
To je špatně, můžeš se pokoušet do toho motat animace (a ano, jde to - a skončíš s něčím složitějším než kdyby sis napsal fyziku, navíc to bude nerozšiřitelné a neupravitelné.
V různých projektech jsem používal různé fyzikální enginy - PhysX, Havok, Bullet Physics a Open Dynamics Engine (který mi přišel jako jeden z nejlepších), plus jsem jednou napsal i vlastní (ale ten uměl pouze rigid bodies a nějaké triviální joints).
Momentálně převážně používám ODE (který je super navržený a většinou postačující). Ale vzhledem k relativně solidně navrženému rozhraní fyziky v enginu nemám problém kdykoliv přepnout na jiný. _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
|
Spytihněv
Založen: 05. 04. 2011 Příspěvky: 547 Bydliště: Praha
|
Zaslal: 23. leden 2014, 09:36:39 Předmět: Re: Pohyb auta (GL) |
|
|
Jorns> myslíš tohle?
kód: |
x+=rychlost*cos(úhel*pí/180);
y+=rychlost*sin(úhel*pí/180);
|
|
|
Návrat nahoru |
|
|
Dlaha
Založen: 30. 07. 2007 Příspěvky: 598 Bydliště: Olomouc
|
Zaslal: 23. leden 2014, 09:38:02 Předmět: |
|
|
Jestli má kolega na mysli něco takového:
http://freehry.doupe.zive.cz/recenze/smash-the-granny/
Tak bych mu pokročilé 3D fyzikální enginy nedoporučoval.
Goniometrické funkce a trochu ladění bude stačit.
Jorns jen podle mě do sebe míchá "fyzikální" model hry (kde je auto postaveno, kam míří, přepočítávání pozice ...) a vykreslování (funkce gltranslate, glrotate).
Ve výsledku bude potřeba spočítat pozici přes goniometrické funkce, až bude pozice známa, tak vykreslit přes transformace. _________________ Other Inside
Greenlitnuto! |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 23. leden 2014, 10:26:25 Předmět: |
|
|
Vilem, nehrotis to trochu? Chlapec ma strach z matic a snazi sa pochopit, ako rozpohybovat 2D obdlznik a ty ho chces strasit este nejakymi konecnymi rieseniami? Tocivy moment motora? Klby na kolesach? Si na neho zly
Jorns: Budes potrebovat pochopit ten prapodivny sposob pomocou glTranslate a glRotate! Fakt!!! Budes musiet pochopit, ze tieto GL funkcie vyrabaju matice, ktore prinasobia k sucasnej matici. A ta matica sa pouziva na transformovanie vrcholov, ktore posles na vykreslenie. Budes musiet pochopit tieto jednoduche koncepty, ktore nie su hned uplne jasne a zjavne a potom to bude uz easy. Nie je to tazke, ale vyzaduje to par hodin premyslania, kreslenia a pocitania a pokusov s kodom. Uroven gymnazia. Si ready? _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 23. leden 2014, 10:55:45 Předmět: |
|
|
Tak teda na zaciatok... Tvoje auto bude mat par vlastnosti:
class Auto { Vector2 pos; float speed; float dir; }
Pozicia je jasna (v metroch). Rychlost je skalar v smere dir (v metroch za sekundu) a dir je smer v radianoch. Dohodneme sa, ze vpravo je 0 radianov, hore PI/2, vlavo PI a dole 3*PI/2 radianov, klasika.
V kazdom snimku nejako modifikujes rychlost a smer, podla toho, co stlaca pouzivatel. To bude zrychlenie. Ak stlaci sipku hore, bude mat zrychlenie napriklad 5 m/s/s. Ak dole, tak -10 m/s/s. Cisla si vymyslis a vyskusas. Zrychlenie pricitas k rychlosti.
kód: |
auto.speed += acceleration * delta. // v = a * t |
Delta je kolko sekund uplynulo od minuleho snimku. Pozri thread niekde vedla, je to DOLEZITE pochopit. Co sa tyka smeru, tak ak stlaci sipku doprava, tak zmenis smer takto:
kód: |
auto.dir += nejaka_konstanta * delta; |
ak dolava, tak opacne. Takze mas aktualizovanu rychlost a smer, mozes aktualizovat poziciu.
kód: |
auto.pos.x += cos(auto.dir) * auto.speed * delta; // s = v * t
auto.pos.y += sin(auto.dir) * auto.speed * delta; |
A mas auto na novej pozicii. Mozes vykreslovat.
kód: |
glLoadIdentity(); // aktualnu maticu na identitu
glPushMatrix();
glTranslatef(auto.pos.x, auto.pos.y, 0); // posun v X a Y
glRotatef(RAD_to_DEG(auto.dir), 0, 0, 1); // rotacia okolo Z
nakresliAuto(); // nakresli auto, ktore je vystredene okolo 0,0,0 a smeruje doprava!
glPopMatrix();
glPushMatrix();
...
nakresli dalsi, iny objekt;
glPopMatrix();
... |
A teraz sa pytaj Negarantujem, ze som tam z hlavy nedal chyby _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 23. leden 2014, 11:23:15 Předmět: |
|
|
pcmaster: +1!
Vilem: neřek bych, že to budu zrovna já, jakožto veliký zastánce a propagátor fyziky ve hrách, ale napíšu to: do jednoduchých her, kde neni gameplay založena přímo na reakci uživatele s (fyzikálním) objektem, je fyzika veliký nepřítel herního kódu. Když bych chtěl dát auto do nějaký arkádový hříčky, tak bych rozhodně použil něco jako psal pcmaster - chce to pouze jemně okořenit fyzikou (v += a * t), jinak si zaděláš na problémy.
Jinak, tvá video ukázka je zajímavá, auto vypadá skvěle! Ale zdá se mi, že se trochu divně pohupuje, zvlášť ten dojezd je podivný, ale možná to tak má být. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 23. leden 2014, 13:59:12 Předmět: |
|
|
kód: |
glLoadIdentity(); // aktualnu maticu na identitu
glPushMatrix(); |
Nemělo by tohle být naopak? Asi nemá význam ukládat si jednotkovou matici a přitom tu před nahráním identity zahodit? |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 23. leden 2014, 14:03:41 Předmět: |
|
|
Jasne, moze to byt aj tak. Kazdopadne v mojom pripade mas na zaciatku identitu a vypopujes sa zase k identite
Jorns: chapes, o co sa jedna? _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 23. leden 2014, 15:53:41 Předmět: |
|
|
Těch pushů je omezený počet, tak proč je plýtvat na jednotkovou matici. Příklad bych chápal spíš s komentářem:
kód: |
glLoadIdentity(); // aktualnu maticu na identitu
...nastavení kamery, vykreslení věcí předtím... <--
// vykreslíme tenhle objekt
glPushMatrix();
glTranslatef(auto.pos.x, auto.pos.y, 0); // posun v X a Y
...
glPopMatrix();
|
_________________ Award-winning game developer |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 23. leden 2014, 16:10:12 Předmět: |
|
|
Rozhodne, vsak to mal byt zaciatok, aby sa OP chytil. Dik za doplnenie _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 23. leden 2014, 16:12:13 Předmět: |
|
|
STOP. zabudnite na glRotate() a glTranslate(). to je 20 rokov stara technologia. dnes je treba pouzivat kniznicu na to urcenu. stiahni si GLM http://glm.g-truc.net/ _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 23. leden 2014, 16:19:24 Předmět: |
|
|
GLM není pro začátečníka tak intuitivní. Klidně ať se to naučí pomocí staré technologie, fungovat to bude. Jakmile to pochopí, přepíše si to do GLM. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
|