niXon
Založen: 27. 10. 2007 Příspěvky: 22
|
Zaslal: 27. říjen 2007, 09:11:41 Předmět: SDL_image, OpenGL, PNG a priehľadnosť |
|
|
Zdravím, mám takýto problém. Snažím sa pomocou OpenGL a SDL_image načítať PNG obrázok s priehľadnosťou. (mimochodom, jazyk C++). Obrázok sa načíta v poriadku (teda aspoň to tak vyzerá), a zobrazí sa, no pravdepodobne buď je chyba v nesprávnom alfa kanáli obrázku alebo v mojom kóde, a na to potrebujem prísť, kde je chyba. Tu je úryvok z môjho kódu:
kód: |
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
glColor3f(0, 0, 1);
glBegin(GL_QUADS);
glVertex3f(-1, -1, -4);
glVertex3f(-1, 1, -4);
glVertex3f(1, 1, -4);
glVertex3f(1, -1, -4);
glEnd();
glColor3f(1, 1, 1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glPushMatrix();
glRotatef(i, 0, 0, 1);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-1, -1, -2);
glTexCoord2f(1.0, 0.0); glVertex3f(-1, 1, -2);
glTexCoord2f(1.0, 1.0); glVertex3f(1, 1, -2);
glTexCoord2f(0.0, 1.0); glVertex3f(1, -1, -2);
glEnd();
glPopMatrix(); |
tento kód sa vykoná každým obrázkom (framom), v premennej "texture" je odkaz na PNG priehľadnú textúru, a výsledok vyzerá tak, že vidím priehľadné PNG, lenže je priehľadné aj tam kde nemá byť, napríklad v strede obrázku presvitá modrý štvorec, ktorým testujem priehľadnosť, a chcel by som dosiahnuť, aby bol vidieť len okolo obrázku... neviete kde robím chybu ? mimochodom, na načítavanie obrázku používam tento kód: http://www.nehe.ceske-hry.cz/cl_sdl_picture.php a na priehľadnosť používam GIMP (pod ubuntu). Priložil som aj screenshot, aby ste videli ako to vyzerá. Štvorec je vykreslený v pozadí (namodro) a ikonka VLC v popredí, ktorá by mala mať priehľadnosť. A ešte jedna vec, keď som to dal vykresliť v niekoľkých programoch, tak tie priehľadnosť berú do úvahy (firefox, gimp...).
Vopred ďakujem za Vašu pomoc.
VYRIEŠENÉ!!! Chybu som mal v nastavení blendingu, malo tam byť
kód: |
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
|
|