Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Kuvan piirtäminen näytölle 3d-tilassa (opengl+sdl)

Kray [15.01.2008 18:22:46]

#

Niin, miten opengl:llä saa piirrettyä kuvia näytölle opengl-tilassa? Siis suoraan aivan kuin 2d-tilassa. SDL kun ei voi piirtää jos opengl käytössä.
Edit: Saan siis tuolla Metabolixin SDL-pinnat OpenGl-tekstuuriksi -vinkillä kyllä tekstuuriksi.

Metabolix [15.01.2008 18:50:30]

#

No jos et halua polygonina piirtää, niin glDrawPixels on ratkaisu. Testaamatta väittäisin, että se toimii näin:

/* Asetetaan rasteri */
glRasterPos2f(x, y); /* voi antaa z-koordinaatinkin */
glDrawPixels(kuva->w, kuva->h, GL_RGBA, GL_UNSIGNED_BYTE, kuva->pixels);
/* Tarkista kuvan formaatti ensin (vaikka sen tekstuurivinkin mukaan) */

Matriisi pitää tietenkin asettaa sopivasti, jos haluaa piirtää juuri pikselien mukaan eikä vain jotain neliöpintaa GL_QUADin tapaan. Toisaalta samaan tulokseen pitäisi kyllä päästä myös sopivilla asetuksilla ja oikein asetellulla GL_QUADilla.

Kray [15.01.2008 19:00:17]

#

Öh... Miten se matriisi pitää asettaa? En Oikein saanut toimimaan...

Kray [16.01.2008 16:59:37]

#

Hmm... Sain toimimaan niin, että se piirtää ne sinne pisteeseen x,y, tosin tässä tapauksessa 3d -alueen kohtaan... O_o
Edit: Eli siis ei näytölle, vaan sinne alueelle: Käytän gluLookAtia.
Edit2: Opettelin hiukan ja sain matriisit käsiteltyä oikein. Nyt kuitenkin seuraava ongelma: kun piirrän kuvan, niin se toimii, jos vain laitan kuvan y-arvon kuvan korkeus+y. Muuten se piirtyy liikaa vasemmalle.

glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    glOrtho (0.0f, screen.width, screen.height, 0.0f, -1.0f, 1.0f);
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();
    glRasterPos2f(0, 64);
    glDrawPixels(kuva->w, kuva->h, GL_RGBA, GL_UNSIGNED_BYTE, kuva->pixels);
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);
    glPopMatrix();

Edit3: Eli siis y-arvo ei toimi oikein :P

Kray [16.01.2008 19:03:05]

#

Tuon y-ongelman lisäksi en vain keksi miten saisin sen formaatin oikein...

Metabolix [16.01.2008 20:10:31]

#

Formaatin saa oikein aivan samalla tavalla kuin tuossa tekstuurivinkissäni eli luomalla apupinnan. Lienee järkevää muuttaa koko pinta tuohon käyttökelpoisempaan formaattiin vaikka jo lataamisen yhteydessä.

Siis rasterin sijaintiinko tuo korkeus+y pitää laittaa? Kuulostaapa merkilliseltä. Saatko kuvakaappauksen tilanteesta?

Kray [17.01.2008 15:31:38]

#

Niin siis kuva näyttää rasterina 0,0 tältä: http://koti.mbnet.fi/kray/kuvia/3dongelmarasteri00.bmp kuvan pitäisi olla vasemmassa yläreunassa, ja kun laitan rasterin 0,kuva->h, niin näkyy näin: http://koti.mbnet.fi/kray/kuvia/3dongelmarasteri0img-h.bmp Lisäksi se on väärin päin, kuva on tämä: http://koti.mbnet.fi/kray/kuvia/3dongelmatarkoitettukuva.bmp
Eli onko joku asetus väärin tms...?
Edit: Niin siis formaattiongelma ratkaistu, mutta muuten pielessä.
Edit2: Kun laitoin glOrtho:n näin: glOrtho (0.0f, screen.width, 0.0f, screen.height, -1.0f, 1.0f); , niin tuntuisi siltä että muuten toimii, mutta kuva on väärinpäin, eli pitäisi kääntää jotenkin... Siis koko näyttötila.

Vastaus

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

Tietoa sivustosta