Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: OGL, textuurin piirto

vehkis91 [18.01.2009 17:41:04]

#

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;
    }
}

Markus [18.01.2009 17:51:35]

#

Kutsut "glTexCoord2d" funktiota vain kerran eli annat kaikille vertekseille saman tekstuurikoordinaatin.

Kutsu kyseistä funktiota ennen jokaista glVertex2d kutsua antaaksesi jokaiselle verteksille oman koordinaatin.

vehkis91 [18.01.2009 19:01:56]

#

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();

Markus [18.01.2009 19:23:26]

#

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ä.

vehkis91 [18.01.2009 19:24:56]

#

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();

Metabolix [18.01.2009 20:51:46]

#

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ä.)

vehkis91 [18.01.2009 20:55:14]

#

JESS, sain toimimaan tuon koodivinkin avulla!! :D:D:D:D

Edit: tosin kuvanlaatu huononee aika radikaalisti verrattuna sdl:n vastaavaan... :S

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta