.[ ČeskéHry.cz ].
Pohyb auta (GL)
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Jorns



Založen: 27. 08. 2013
Příspěvky: 14

PříspěvekZaslal: 22. leden 2014, 23:45:25    Předmět: Pohyb auta (GL) Odpovědět s citátem

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
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: 23. leden 2014, 00:09:28    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
Jorns



Založen: 27. 08. 2013
Příspěvky: 14

PříspěvekZaslal: 23. leden 2014, 00:26:24    Předmět: Odpovědět s citátem

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
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: 23. leden 2014, 03:51:23    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
Spytihněv



Založen: 05. 04. 2011
Příspěvky: 547
Bydliště: Praha

PříspěvekZaslal: 23. leden 2014, 09:36:39    Předmět: Re: Pohyb auta (GL) Odpovědět s citátem

Jorns> myslíš tohle?
kód:

x+=rychlost*cos(úhel*pí/180);
y+=rychlost*sin(úhel*pí/180);
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: 23. leden 2014, 09:38:02    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



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

PříspěvekZaslal: 23. leden 2014, 10:26:25    Předmět: Odpovědět s citátem

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 Evil or Very Mad

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



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

PříspěvekZaslal: 23. leden 2014, 10:55:45    Předmět: Odpovědět s citátem

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 Smile Negarantujem, ze som tam z hlavy nedal chyby Smile
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 23. leden 2014, 11:23:15    Předmět: Odpovědět s citátem

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



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

PříspěvekZaslal: 23. leden 2014, 13:59:12    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



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

PříspěvekZaslal: 23. leden 2014, 14:03:41    Předmět: Odpovědět s citátem

Jasne, moze to byt aj tak. Kazdopadne v mojom pripade mas na zaciatku identitu a vypopujes sa zase k identite Smile

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



Založen: 18. 09. 2007
Příspěvky: 1536
Bydliště: u Prahy

PříspěvekZaslal: 23. leden 2014, 15:53:41    Předmět: Odpovědět s citátem

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



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

PříspěvekZaslal: 23. leden 2014, 16:10:12    Předmět: Odpovědět s citátem

Rozhodne, vsak to mal byt zaciatok, aby sa OP chytil. Dik za doplnenie Smile
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



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

PříspěvekZaslal: 23. leden 2014, 16:12:13    Předmět: Odpovědět s citátem

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



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

PříspěvekZaslal: 23. leden 2014, 16:19:24    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
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