Transparenz auf Texturen
-
Hallo,
Ich habe mit Hilfe der DisplayList1 ein Objekt erzeugt, auf welches ich meine Textur „lege“. In DisplayList2 habe ich ein Objekt, welches sich dahinter befindet. Wenn ich DisplayList1 ohne eine Textur zeichne und die Eigenschaft der Transparenz vergebe, dann funktioniert das auch, doch sobald ich das Objekt wieder mit der Textur belege, ist diese nicht mehr transparenz. Wo liegt mein fehler?
Danke schon mal im voraus.
void __fastcall TForm1::OpenGL2GLInit(TObject *Sender) { glEnable ( GL_DEPTH_TEST ); glClear ( GL_DEPTH_BUFFER_BIT ); glDepthFunc (GL_LEQUAL ); glEnable ( GL_BLEND ); glEnable (GL_TEXTURE_2D); LoadTexture ("c:\\eins.bmp", (GLuint*)&Button); } void __fastcall TForm1::OpenGL2GLPaint(TObject *Sender) { glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glMatrixMode ( GL_PROJECTION ); glLoadIdentity(); glOrtho ( 0.0, 6.0, 0.0, 6.0,-7.0, 7.0); gluLookAt (0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glMatrixMode ( GL_MODELVIEW ); glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); glNewList ( 1, GL_COMPILE ); glBindTexture(GL_TEXTURE_2D, Button); glBegin(GL_QUADS); glColor4f(0.0, 1.0, 0.0, 1.0); glTexCoord2d(0.0, 1.0); glVertex3f ( 0.0, 0.0, 4.0); glTexCoord2d(0.0, 0.0); glVertex3f ( 0.0, 2.0, 4.0); glTexCoord2d(1.0, 0.0); glVertex3f ( 1.0, 2.0, 4.0); glTexCoord2d(1.0, 1.0); glVertex3f ( 1.0, 0.0, 4.0); glEnd(); glDisable(GL_TEXTURE_2D); glEndList(); glNewList ( 2, GL_COMPILE ); glBegin ( GL_POLYGON ); glColor4f(1.0, 0.0, 0.0, 0.3); glVertex3f ( 0.0, 0.0, 2.0 ); glVertex3f ( 0.0, 2.0, 2.0 ); glVertex3f ( 2.0, 2.0, 2.0 ); glVertex3f ( 2.0, 0.0, 2.0 ); glEnd(); glEndList(); glCallList(1); glTranslatef ( 0.5, 0.5, 0.0); glCallList(2); glLoadIdentity(); glFlush(); }
-
Öhm, warum compilest du die Listen bei jedem Frame neu?
Normalerweise erstellt man sich eine Dlist einmal (glGenLists),
füttert sie mit den Daten und ruft sie dann während eines
Frames nur auf.In der Render-Func schaltest du die Texturen nach dem Rendern
des Buttons ab, danach aber nie wieder an. Der Button wird
also einmal mit und sonst ohne Textur gerendert.Schätze mal die fehlende Transp. ergibt sich als Folgefehler.
-
Det sollte ja auch nur ein BSP sein. Die Texturen muss ich nach dem ausführen von Liste 1 ausschalten, da sonst Liste 2 auch mit Texturen gerendert werden würden, da ja aber keine glTexCoord2d vorhanden sind, würde ich so ein schwarzes Fenster für mein zweites Objekt erhalten. Also, soweit ist alles ok! Wie gesagt, lediglich der Button ist nicht transparent ...
-
Ist das ne Textur mit Alphakanal?
-
hat deine textur einen alpha-kanal ?
-
Wo soll ich den Alphakanal angeben oder meint ihr bei glColor4f(0.0, 1.0, 0.0, 1.0); den Alpha Wert?
-
du brauchst in deiner textur einen alphakanal sprich vier byte pro pixel = RGBA
da du bitmaps verwendest musst du den alpha selber beim laden hinzufügen.
siehe faq oder hilfe irgendwo steht da was.
-
miller_m schrieb:
du brauchst in deiner textur einen alphakanal sprich vier byte pro pixel = RGBA
da du bitmaps verwendest musst du den alpha selber beim laden hinzufügen.
siehe faq oder hilfe irgendwo steht da was.Brauch man nicht, man kann den alphakanal auch aus den Vertizen oder einem globalen Faktor nehmen.
-
TGGC schrieb:
Brauch man nicht, man kann den alphakanal auch aus den Vertizen oder einem globalen Faktor nehmen.
mach ein beispiel würde mich interessieren
-
Kann man ueber einen OpenGL Befehl dem OpenGL Fenster Transparenz zuweisen ???