Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: SDL & GL - kuvan pilkkominen

Sivun loppuun

InvalidCo [20.10.2007 20:42:18]

#

Yritin pilkkoa SDL_Surfacea ja tehdä siitä OpenGL-tekstuurien arrayta, mutta tekstuurit näkyvät vain mustina palikoina. Mikä on vialla?

GLuint fontti[31];

SDL_Surface *fontit=IMG_Load("font.png");

SDL_Surface *temp=IMG_Load("t.png");

glGenTextures(30,fontti);

int i;

for(i=0;i<30;i++) {
        SDL_Rect mista;
        mista.x=i*64;
        mista.y=0;
        mista.w=64;
        mista.h=64;
        SDL_Rect minne;
        minne.x=0;
        minne.y=0;
        SDL_BlitSurface(fontit,&mista,temp,&minne);

        glBindTexture(GL_TEXTURE_2D,fontti[i]);

        glTexImage2D(GL_TEXTURE_2D, 0, 3, temp->w, temp->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, temp->pixels);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_NEAREST);
}

(Mod. Edit. Käytähän välejä, ettei leiska hajoa.)

Legu [20.10.2007 21:51:41]

#

No tuossahan ei noin ylipäätään ole mitään järkeä, sillä kannattaa tehdä funktio, joka piirtää koko tekstin SDL_Surfacelle noita kirjaimia käyttäen. Sitten lataat sen valmiin tekstin OpenGL:lle ja piirrät.
Ja mikä oli tuon t.png:n idea?

InvalidCo [20.10.2007 22:06:42]

#

Mutta minun tarvii pyäritellä ja käännellä yksittäisiä kirjaimia ohjelmassani... ja t.png:n laitoin tuonne, kun luulin, että vika johtuisi siitä ettei temp-surfacella ole oikeita attribuutteja...

Legu [20.10.2007 22:10:03]

#

Tutustu SDL_CreateRGBSurfaceen.

InvalidCo [20.10.2007 22:14:43]

#

Kokeilin jo aikaisemmin tuolla, ei toiminut...

Metabolix [21.10.2007 12:02:07]

#

Olisiko ongelmasi siinä, että minne-alueen leveys ja korkeus voivat olla mitä vain, kun et erikseen niitä alusta? Kun kuitenkin haluat piirtää koko sen alueen, jonka olet mista-laatikkoon valinnut, voit jättää koko minne-parametrin antamatta ja antaa tilalle NULL-osoittimen. Sopivat parametrit SDL_CreateRGBSurface-funktiolle voit luntata aihetta sivuavasta koodivinkistäni.

InvalidCo [21.10.2007 16:13:19]

#

Kokeilin määritellä leveyden ja korkeuden, eikä mikään näyttänyt erilaiselta ohjelman suorituksessa. Ei auttanut sekään että laitoin NULLin funktion neljänneksi parametriksi. (Ja kuten sanoin jo, kokeilin jo aikaisemmin SDL_CreateRGBSurface-funktiolla) Itse epäilen että jokin on vialla noissa kolmessa OpenGL-funktiossa, mutta en keksi mikä.

Metabolix [21.10.2007 16:40:05]

#

On aika outoa määritellä glTexImage2D:lle, että värissä on kolme komponenttia mutta että formaatti olisi kuitenkin muka RGBA. Korjaapa tuo ja tarkista, että ladattujen kuvien formaatti on oikea.

InvalidCo [21.10.2007 18:58:53]

#

Kokeilin, ei toiminut, ja päätin pilkkoa kuvat valmiiksi erillisiin kuvatiedostoihin. :)

EDIT:HAHAA! Ongelma olikin että minulta puuttuikin seuraavat OpenGL:n funktiot:

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);

Sivun alkuun

Vastaus

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

Tietoa sivustosta