Joo, eli kysäisin tälläistä, eli minulla on kuva jossa on ukon kävely animaatio pätkä. Kuvat ovat peräkkäin kuin filminauhassa ja ennen pelkällä SDL:llä tehdessä tämän "parseeminen" tapahtui SDL_Rect:llä, mutta jos mukaan otetaan OpenGL, niin miten siinä tapahtuu tämä? Eli kuva laitetaan neiliön tekstuuriksi, mutta kuva pitäisi saada yksittäisinä kuten SDL_Rect:llä tehdään. Eli lyhyesti miten ,animaation teko onnistuu SDL ja OpenGL:Llä kun pelkällä SDL se tehdään SDL_Rect.
Itse sain nytten tehtyä jonkinmoisen funktion, mutta nytten tulos on jotain ihan omaa... :P
void GL_Piirto(){ SDL_Surface *kuvapinta; Uint32 rmask; Uint32 gmask; Uint32 bmask; Uint32 amask; rmask = 0xff000000; gmask = 0x00ff0000; bmask = 0x0000ff00; amask = 0x000000ff; kuvapinta = SDL_CreateRGBSurface(SDL_HWSURFACE, 44, 42, 32,rmask, gmask, bmask, amask); kuva = SDL_LoadBMP("Data/mega_anim.bmp"); PiirraSprite(kuvapinta,kuva,0,0,NULL,0); glEnable(GL_TEXTURE_2D); glMatrixMode( GL_TEXTURE ) ; glLoadIdentity() ; glGenTextures(1,&imagee); glBindTexture(GL_TEXTURE_2D, imagee); glTexImage2D(GL_TEXTURE_2D, 0, 3, kuvapinta->w, kuvapinta->h, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, kuvapinta->pixels); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); }
Edit1: Tulos on tällänen: http://img230.imageshack.us/img230/2014/
(Mod. Edit. Rajoitapa vähän välilyönnittömien rivien pituutta kirjoittaessasi, niin on mukavampi lukea...)
Siis hetkinen... Suoritatko tuon ylläolevan koodin joka piirtokerralla vai vain kerran alussa? Miksi kutsut glMatrixMode(GL_TEXTURE)? Miten piirrät neliön?
Animaation piirto onnistuu siten että vaihdetaan neliön nurkkapisteiden tekstuurikoordinaatteja piirrossa. Eli jotenkin näin: (HUOM! olettaen että kuvat ovat vierekkäin kuvassa)
//Tätä kutsuttaessa on siis jo bindattu tekstuuri void PiirraAnimaatio(int moneskoKuva,int monestakoKuvasta, float x,float y,float w,float h){ float texX = float(moneskoKuva)/monestakoKuvasta; float kuvanLeveys = 1.0f/monestakoKuvasta; glBegin(GL_QUADS); glTexCoord2f(texX,0); glVertex2f(x,y); glTexCoord2f(texX,1); glVertex2f(x,y+h); glTexCoord2f(texX+kuvanLeveys,1); glVertex2f(x+w,y+h); glTexCoord2f(texX+kuvanLeveys,0); glVertex2f(x+w,y); glEnd(); }
No mitä tuossa nyt on vikana, niin ainakin tekstuurin pitää olla kakkosen potenssi. Lataa se kuva vaikka niin kuin tässä. Kun sitten olet sen ladannut (huom. koko animaation, ei mitään osia siitä), niin tuo pelkän yhden kuvan piirtäminen on sitten helppoa:
glBindTexture( GL_TEXTURE_2D, texturen_id ); glBegin( GL_QUADS ); glTexCoord2f( 0.0f, 0.0f ); glVertex3f( ..., ..., ... ); glTexCoord2f( 0.5f, 0.0f ); glVertex3f( ... ); glTexCoord2f( 0.5f, 0.5f ); glVertex3f( ... ); glTexCoord2f( 0.0f, 0.5f ); glVertex3f( ... ); glEnd();
Tuossa se nyt ottaisi yhden kulman kuvasta (1/4). Kokeilemalla/Googlella varmaan löytyy, että miten sen sitten saat haluamaksesi.
Hidas
Aihe on jo aika vanha, joten et voi enää vastata siihen.