Elikkäs olen tässä harjoittelemassa OGlää ja mietin, että mikäköhän on koodissani vikana, kun ei suostu blittaan näyttöön 2D textuuria. Tällä hetkellä näyttöön tulee vain ruskea neliö tuon kuvan paikalle...
ESIT: lisäsin koodia...
void Piirra() { glClear(GL_COLOR_BUFFER_BIT); glBindTexture(GL_TEXTURE_2D, mainmenu1); glBegin( GL_QUADS ); glTexCoord2d(0.0,0.0 ); glVertex2d(0.0,0.0 ); glVertex2d(200.0,0.0 ); glVertex2d(200.0,200.0); glVertex2d(0.0,200.0 ); glEnd(); } //Funktio, jolla lataan textuurin. (löysin netistä) GLuint loadTexture(std::string filename) { SDL_Surface *pic; GLuint readypic; pic=IMG_Load(filename.c_str()); if(pic) { glGenTextures(1, &readypic); glBindTexture(GL_TEXTURE_2D, readypic); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, 3, pic->w, pic->h, 0, GL_BGR, GL_UNSIGNED_BYTE, pic->pixels); SDL_FreeSurface(pic); return readypic; } }
Kutsut "glTexCoord2d" funktiota vain kerran eli annat kaikille vertekseille saman tekstuurikoordinaatin.
Kutsu kyseistä funktiota ennen jokaista glVertex2d kutsua antaaksesi jokaiselle verteksille oman koordinaatin.
Ei vieläkään toimi, nyt tulee sekalaista pixelimössöä... :S
Edit: ja siis tässä olisi tarkoitus saada 1 kuva tonne neliön sisään ja tämä kuva sijaitsee tuossa textuurissa.
Nyt on näin:
glBegin( GL_QUADS ); glTexCoord2d(0.0,0.0 ); glVertex2d(0.0,0.0 ); glTexCoord2d(200.0,0.0 ); glVertex2d(200.0,0.0 ); glTexCoord2d(200.0,200.0); glVertex2d(200.0,200.0 ); glTexCoord2d(0.0,200.0 ); glVertex2d(0.0,200.0 ); glEnd();
Tekstuurikoordinaatit annetaan tekstuurin koosta riippumatta väliltä 0-1 (ei siis 0-200). Jos annat tekstuurikoordinaatiksi 200 se tarkoittaa, että tekstuuri toistetaan 200 kertaa rinnakkain, joka näyttää pikselimössöltä.
Jaa oke, ihmekkös kun ei toimikkaan.
Edit: Vieläkin on sivusuunnassa liianmonta kertaa se kuva, mutta kokoajan paranee...
Edit2: tässä on kuva miten nyt näkyy: http://sooda.dy.fi/fpaste/index.php?FAZ
näin pitäis näkyä:http://sooda.dy.fi/fpaste/index.php?PzN
Nyt on näin:
glBegin( GL_QUADS ); glTexCoord2f(0.0f,0.0f);glVertex2f(0.0,0.0 ); glTexCoord2f(1.0f,0.0f);glVertex2f(800.0,0.0 ); glTexCoord2f(1.0f,1.0f);glVertex2f(800.0,600.0); glTexCoord2f(0.0f,1.0f);glVertex2f(0.0,600.0 ); glEnd();
Luultavasti tiedostosi formaatti ei vastaa tuota, jonka ilmoitat glTexImage2D:lle. SDL-pinnan lataamiseen tekstuuriksi voit käyttää tätä koodivinkkiä. (Alfakanavan kanssa se ei tosin taida toimia, mutta silloinhan kuva on yleensä jo valmiiksi RGBA-formaatissa ja muunnoksen voi jättää tekemättä.)
JESS, sain toimimaan tuon koodivinkin avulla!! :D:D:D:D
Edit: tosin kuvanlaatu huononee aika radikaalisti verrattuna sdl:n vastaavaan... :S
Aihe on jo aika vanha, joten et voi enää vastata siihen.