Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Lazaroz
Založen: 06. 09. 2007 Příspěvky: 11
|
Zaslal: 24. červen 2008, 11:13:00 Předmět: pathfinding-poloměr zatočení objektu |
|
|
Zdravím,lámu si hlavu s následujícím problémem,řeším to,aby když dám objektu příkaz ,že se má přesunout na určenou pozici,tak aby vykroužil na kružnici určitou dráhu před tím než se natočí směrem,kterým se má pohybovat.Je to vlastně simulace efektu třeba u automobilu,který má poloměr otáčení daný,a musí nejdřív vytočit určitý oblouk aby se nasměroval kam chce jet.Přikládám obrázek k pochopení toho co chci.
http://www.eimg.cz/show.php?id=1780
Jedná se o to,že výpočet mám jen pro 2d prostor ale potřeboval bych ho pro 3D .Nevíte jak nato?nebo nákou stránku kde bych mohl najít info díky moc |
|
Návrat nahoru |
|
|
if.then
Založen: 13. 04. 2008 Příspěvky: 579
|
Zaslal: 24. červen 2008, 11:26:59 Předmět: Re: pathfinding-poloměr zatočení objektu |
|
|
Napadlo mě, že bys udělal
jednu kružnici pro osu Y,Z(popř.X,Z)
a jednu pro osu X,Y.
Pak bys z
kružnice Y,Z vzal Z-ko a
z X,Y vzal obě hodnoty,
stmelil a měl bys to.
(strukturuju pro lepší pochopení ) _________________ For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++. |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 24. červen 2008, 11:33:54 Předmět: |
|
|
Co takhle implementovat normální fyziku toho letounu a ovládání pomocí kláves/myši a nechat AI ať:
1) má možnost si zjistit stav hry
2) reagovat simulací kláves a myši (nebo rovnou volat určité metody)
V podstatě jde jen o zobecnění hráče. Zároveň tam budeš mít snadno autopilota (přepínáš mezi hráčem a AI u jednoho letounu). _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
Amorph
Založen: 06. 09. 2007 Příspěvky: 68
|
Zaslal: 24. červen 2008, 11:50:16 Předmět: |
|
|
Ja pro steering pouzivam deleni vzdalenosti. Nesmerujes objekt primo k cili, ale k vektoru pohybu objektu prictes vektor k cili o velikosti rovne vzdalenosti (pripadne jejimu nasobku), kterou objekt urazil v predchozim frejmu. Vektor pohybu pak omezis nejakou max rychlosti. Nemusis se zabyvat zadnou analytikou (krome jednoduche prace s vektory). Jediny problem je omezeni uhlu toho pricitaneho vektoru a aktualniho vektoru pohybu. Resp. staci, kdyz ho omezis na nejakou mez a tim nastavis minimalni polomer zatacky. Plus se k tomu da treba pridat vektor setrvacnosti v aktualnim smeru. |
|
Návrat nahoru |
|
|
Lazaroz
Založen: 06. 09. 2007 Příspěvky: 11
|
Zaslal: 24. červen 2008, 12:46:21 Předmět: |
|
|
Děkuji z aodpovědi,sešlo se jich tu celkem dost.
if.then -tohle jsem zkoušel ale dopadlo to náko divně
eosie-ono to vlastně jakoby AI je co chci udělat
Amorph :to zní slibně ale docela sem zvědavej na výsledek ,du to zkusit implementovat ještě jendou díky za odpovědi |
|
Návrat nahoru |
|
|
Lazaroz
Založen: 06. 09. 2007 Příspěvky: 11
|
Zaslal: 24. červen 2008, 14:46:53 Předmět: |
|
|
Amorph napsal: |
Ja pro steering pouzivam deleni vzdalenosti. Nesmerujes objekt primo k cili, ale k vektoru pohybu objektu prictes vektor k cili o velikosti rovne vzdalenosti (pripadne jejimu nasobku), kterou objekt urazil v predchozim frejmu. Vektor pohybu pak omezis nejakou max rychlosti. Nemusis se zabyvat zadnou analytikou (krome jednoduche prace s vektory). Jediny problem je omezeni uhlu toho pricitaneho vektoru a aktualniho vektoru pohybu. Resp. staci, kdyz ho omezis na nejakou mez a tim nastavis minimalni polomer zatacky. Plus se k tomu da treba pridat vektor setrvacnosti v aktualnim smeru. |
Tak jsem to zkoušel,ale výsledek je pohyb ve směru přímky od pozice objektu k destinaci objektu tkaze asi jsem to nepochopil.Můžeš sem třebas pástnout trosku kodu,nebo to nak ještě vysvětlit?díkec chlape |
|
Návrat nahoru |
|
|
Amorph
Založen: 06. 09. 2007 Příspěvky: 68
|
Zaslal: 24. červen 2008, 15:13:16 Předmět: |
|
|
No napsal jsem to mozna moc zjednodusene mozna i trochu nepresne. Kod ti ale bohuzel nepastnu, protoze bys mi asi musel podepsat NDA Ale zkusim jeste jednou napovedet.
fElapsed_dist - vzdalenost urazena za posledni update.
vActPos - moje pozice
vTarget - pozice cile
vActSpeed - aktualni vektor pohybu - udava smer a jeho velikost rychlost pohybu.
vDiff = vTarget - (vActPos + vActualSpeed) - rozdilovy vektor k cili.
vDiff = (vDiff.norm() * fElapsed_dist) - znormalizuju rozdilovy vektor a vynasobim urazenou vzdalenosti
vActSpeed += vDiff - prictu rozdilovy vektor k aktualnimu vektoru pohybu
vActSpeed.clamp(max_speed) - omezim maximalni rychlosti
pak tam jeste musis vyresit omezeni uhlu zataceni a kontrolovat vzdalenosti, abys neprejizdel cil, nastavit pocatecni stav a podminky pri rozjezdu z klidu a podobne. Ale kdyz to udelas spravne, tak budes mit luxusni plynulej steering po krivce. |
|
Návrat nahoru |
|
|
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
Zaslal: 24. červen 2008, 15:57:49 Předmět: |
|
|
A nebylo by jednodussi pouzit rovnkou nejakou krivku? Napr bezierova kubika by se hodila.
Vypocet drahy je uz pak jednoduchy, jde jen o spravne umisteni ridicich bodu.
Pro predstavu http://www.cs.princeton.edu/~min/cs426/jar/bezier.html |
|
Návrat nahoru |
|
|
Amorph
Založen: 06. 09. 2007 Příspěvky: 68
|
Zaslal: 24. červen 2008, 16:12:24 Předmět: |
|
|
ad bezier: no nevim, jestli polynomialni krivka je jednodussi, nez prosta prace s vektory, ale pouzit se to samozrejme da. Ale v momente, kdy potrebujes hledat cestu - vyhybat se okolni geometrii, zacina byt to umisteni ridicich bodu pomerne slozitej problem. |
|
Návrat nahoru |
|
|
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 24. červen 2008, 16:40:36 Předmět: |
|
|
no ja myslim ze bychom si prvne meli rict jaky problem presne resime - jsou tu dve mozne verze totiz -
bud chce autor threadu opravdu obecne nataceni - jsem v libovolnem bode A a muj rychlosti vektor je v a chci do libovolneho bodu - pak opravdu budem muset resit ty obecne popsane problemy - premyslim jestli bezier ma to spravne zakriveni, ale asi jo - nicmene ani tak bych ho nedoporucoval - objekt by mel splnovat nejakou fyziku pri danem pohybu, tak mozna by bylo lepsi simulovat "stisky klaves" - tedy treba simulovat stisk klavesy doleva, dokud se nenatocim na objekt a pak dal primo
a nebo pokud chce delat AI treba pro auta tak byva jednodussi mit trasy preddefinovane a nutit AI aby se jich co nejvice drzela - pak neni potreba resit zadne vypocty, ale proste si tu trasu projet, nadefinovat way-pointy a je to |
|
Návrat nahoru |
|
|
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 24. červen 2008, 20:11:56 Předmět: |
|
|
Lazaroz> Nedavno jsem obecne steering/repulsion vectors/atd.. resil. Vysekal jsem ti maly funkcni priklad: http://inputwish.com/files/simple-steering.tgz
napsano v pythonu (pyopengl, pygame). Testovaci vizualizace je pouze ve 2d, ale jde skutecne jen o zobrazeni - vse je samozrejme pocitano ve 3d (otestovat lze zmenou nastaveni projekcni matice a umistenim "agent" do prostoru). V prikladu (test0.py) si zkus pohrat z hodnotami "agent" (mass, max_force apod.). Doufam ze priklad pomuze.
Jinak mnohem vic informaci lze najit zde: http://www.red3d.com/cwr/steer/
btw: nic podepsat nechci |
|
Návrat nahoru |
|
|
Lazaroz
Založen: 06. 09. 2007 Příspěvky: 11
|
Zaslal: 9. červenec 2008, 09:22:37 Předmět: |
|
|
Amorph:tak jsem to nak splacal a je to fakt luxusni steering jak si říkal,díky moc za radu ,ted to jeste musim nak doladit abych si mohl volit polomer zatoceni atd ale jinak to funguje vyborne |
|
Návrat nahoru |
|
|
|