.[ ČeskéHry.cz ].
SDL a rotace
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
survik1



Založen: 22. 08. 2007
Příspěvky: 107

PříspěvekZaslal: 8. září 2007, 18:34:04    Předmět: SDL a rotace Odpovědět s citátem

Dobrý den. Chci se zeptat, jestli se dá s obrázkem nějak rotovat? Nechci ale k tomu použít OpenGL.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Weny Sky



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

PříspěvekZaslal: 8. září 2007, 18:38:53    Předmět: Odpovědět s citátem

http://www.gamedev.net/community/forums/topic.asp?topic_id=381538
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



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

PříspěvekZaslal: 8. září 2007, 19:47:17    Předmět: Odpovědět s citátem

v tom threade odporucily pouzit SDL_gfx co problem rotacie riesi ale vystava problem ze sa to neda prilis pouzit v realnom case pretoze je to prilis narocne ny vykon. su tri riesenia.

1. pouzit OpenGL DX
2. predpripravit si natocene sprity bud v grafickom editore
3. alebo pri nacitavani pomocou SDL_gfx
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
tichy



Založen: 19. 12. 2007
Příspěvky: 3

PříspěvekZaslal: 19. prosinec 2007, 16:56:47    Předmět: Re: SDL a rotace Odpovědět s citátem

survik1 napsal:
Dobrý den. Chci se zeptat, jestli se dá s obrázkem nějak rotovat? Nechci ale k tomu použít OpenGL.

Čau, tendle problém jsem taky řešil, napsal jsem si nato vlastní funkci:

kód:
void rotace (SDL_Surface *srcs,SDL_Surface *dsts,double uhel,double x, double y)
{
   double i,j,UHEL,sinuhel,cosuhel,pricX,pricY,pocvyk,sinuheli,cosuheli;
   double srcsw,srcsh;
   Uint32 Px,Py,*barv,scp4,*pixpoz,pop4;
   
   srcsw=srcs->w;
   srcsh=srcs->h;
   scp4=dsts->pitch/4;
   pop4=srcs->pitch/4;
   sinuhel=sin(uhel);
   cosuhel=cos(uhel);
   
   pricX=x-(sinuhel*((srcsw/2))-cosuhel*((srcsh/2)));
   pricY=y-(cosuhel*((srcsw/2))+sinuhel*((srcsh/2)));
   for (i=0;i<srcsw;i+=1)
   {
      sinuheli=sinuhel*i;
      cosuheli=i*cosuhel;
      for (j=0;j<srcsh;j+=1)
      {
         barv=(Uint32 *)srcs->pixels + ((Uint32)j)*pop4 + ((Uint32)i);
         Px=(Uint32)(((sinuheli)-(j*cosuhel))+pricX);
         Py=(Uint32)(((sinuhel*j)+(cosuheli))+pricY);
         pixpoz=((Uint32 *)dsts->pixels +(Py*scp4 + Px));
         *pixpoz=*barv;
         *(pixpoz+1)=*barv;
      }
   }
}

V programu pak:
rotace(zdroj_obr,kam_vykreslit,uhel,x,y)

Ale má to par omezeni:
Zdrojová i cílová surface musí bejt ve 32bit (dá se lehce upravit i pro jiné)
Do cilove oblasti se musi obrazek vejit, jinak program spadne

jinak nezapomeň si přidat knihovnu math.h pro sin a cos

Kdyby náhodou znal nikdo lepší funkci na rotaci obrázku, byl bych rád za každej nápad. Tudle funkci jsem poměrně slušně odladil, takže u malejch obr je poměrně rychlá.[/code]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
yaqwsx



Založen: 25. 02. 2008
Příspěvky: 66

PříspěvekZaslal: 22. březen 2008, 20:03:40    Předmět: Odpovědět s citátem

Opravdu neexistuje nějáká f-ce, která by využívala HW a byla rychlá? Nejrychlejší funkce, kterou jsem našel dokázala otočit 25 obrázků 70 × 70 bodů při 20fps
Vždyť i Game Maker umí realtime točit obrázky Twisted Evil
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 22. březen 2008, 20:39:30    Předmět: Odpovědět s citátem

OpenGL. Nezáleží, jestli tam s něčím točíš nebo ne, furt je to stejně rychlý.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
yaqwsx



Založen: 25. 02. 2008
Příspěvky: 66

PříspěvekZaslal: 22. březen 2008, 21:01:57    Předmět: Odpovědět s citátem

JJ, to vím, ale neexistuje nějáká už někde napsaná f-ce na to točení?OpenGl prozatím totiž moc neholduju...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 23. březen 2008, 00:09:06    Předmět: Odpovědět s citátem

Pokud to chceš HW akcelerované, musí se to provést ve videopaměti a pak to tam buď musí dočasně zůstat nebo se to zobrazí na display. Zpět na RAM by se to vracet nemělo, protože ty přesuny cpu<->gpu dost zpomalují, což je problém. SDL rotace myslím pracuje v softwaru na cpu, takže by sis moc nepomohl. A pokud vím, pohodlnější přístup k HW než přes GL a D3D není.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
yaqwsx



Založen: 25. 02. 2008
Příspěvky: 66

PříspěvekZaslal: 23. březen 2008, 19:32:28    Předmět: Odpovědět s citátem

Díky, ale OGL nebo DirectX se zatím učit nehodlám, no asi se bez toho budu muset obejít...

Tď mě ještě napadlo: Jde dostat SDL_Surface do chache procesoru? Potřeboval bych totiž rotovat malými obrázky(max 40 × 40px) a myslím, že by to ten proces možná urychlilo....
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
tichy



Založen: 19. 12. 2007
Příspěvky: 3

PříspěvekZaslal: 23. březen 2008, 19:58:40    Předmět: Odpovědět s citátem

yaqwsx napsal:
Opravdu neexistuje nějáká f-ce, která by využívala HW a byla rychlá? Nejrychlejší funkce, kterou jsem našel dokázala otočit 25 obrázků 70 × 70 bodů při 20fps
Vždyť i Game Maker umí realtime točit obrázky Twisted Evil


Skoušel jsi tu mojí funkci co zmiňuju nahoře? teď si nejsem jistej jak moc je to rychlí (už je to docela dlouho co jsem to psal), ale myslim si že na mim 1,8 GHz to točilo s obr 640x480 nějakejch 30-40 Fps a těch tvejch 70x70 musí i ta nejhorší funkce utočit min 200 Fps


yaqwsx napsal:
Tď mě ještě napadlo: Jde dostat SDL_Surface do chache procesoru? Potřeboval bych totiž rotovat malými obrázky(max 40 × 40px) a myslím, že by to ten proces možná urychlilo....

Když to vemeš 40x40, to máš 1600 pixelů , pokud bys to rotoval 30Fps tak dostaneš 48 000 pixelů, což je tak směšná hodnota pro procesor, co jsem skoušle na mim 1,8 GHz tak neni problém vykreslit bez HW akcelerace 5-8 milionu pixelů .
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
yaqwsx



Založen: 25. 02. 2008
Příspěvky: 66

PříspěvekZaslal: 23. březen 2008, 21:04:46    Předmět: Odpovědět s citátem

Ja jsem jako test zkoušel točit 50 obrázků 100 × 100px na jeden krok a dostal jsem se k hodnotám 20 fps, a to nemám až zas tak špatné PC...
Jinak tady není problém v rychlosti procesoru(to je pro něj směšný úkol), ale v neustálém cestování dat CPU -> RAM a zpět

Asi zkusím udělat první návrh a pak uvidím, jak to s tou rychlostí bude...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Weny Sky



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

PříspěvekZaslal: 23. březen 2008, 21:14:56    Předmět: Odpovědět s citátem

yaqwsx napsal:
Tď mě ještě napadlo: Jde dostat SDL_Surface do chache procesoru?.
pokud je ten surface ulozeny v systemove ram, tak to urcite pres cache jde Wink

Ale jinak k tvemu problemu. To je takovy problem si ty sprity predpocitat treba po 6°, kdyz uz se tak branis OpenGL, kde napises jen glrotatef(...) a mas to orotovane Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 23. březen 2008, 22:17:37    Předmět: Odpovědět s citátem

weny - dokonce jeste optimalnejsi reseni - nez to predpocitat najednou - pocitat to az je potreba - pri kazdem kresleni spritu ifnout do pole jeste tam je nebo neni NULL - pokud ne vim ze mam obrazek predrotovany - pokud je predpocitam ho a priste uz ho pouziju

ad pouziti cache - do cache ti to cpe sam optimalizer - nemel by ses mu do toho srat - nevis co vsechno ostatni se vali v cachi

a tvuj problem - snazis se resit neresitelne - pomalost RAM - misto abys tomu predpocitanim pomohl - resit SW vec, ktera jenom na HW - takze misto toho pocitat porad stejnou vec dokola ji spocitej jednou, uloz a priste jenom pouzij
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 23. březen 2008, 23:46:30    Předmět: Odpovědět s citátem

Nj ve starých hrách stejně byly všechny rotace objektů, od kterých se očekávalo, že se budou rotovat, předpočítané.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 24. březen 2008, 08:41:05    Předmět: Odpovědět s citátem

Eosie napsal:
Nj ve starých hrách stejně byly všechny rotace objektů, od kterých se očekávalo, že se budou rotovat, předpočítané.


jj mam v zive pameti nejenom rotace, ale i 2D animace Smile - v 3D muzes pekne hybat objekty a nasimulovat treba otvirani dveri - ve 2D se to pekne rozkresli do 20 fazi pruhledneho obrazku
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 -> 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