überblendung mit Masken
-
Hallo,
Ich würd gern eine Textur so mit einer Maske kombinieren, dass nicht die schwarze Farbe die Transparanz erzeugt, sondern die Farbe der Textur.
Ich habe zb. ein blaues Rechteck (ohne schwarzem Kreis). Die Maske besteht aus einem schwarzem Rechteck
mit weissem Kreis. Das Ergebnis soll ein blaues Rechteck mit dem transparentem Kreis der Hintergrundfarbe sein.
Wie müssen jetzt die Flags für die beiden glBlendFunc gesetzt werden?Dank euch für's reinschauen!
-
niemand kann verstehen was du willst.
-
Es geht um OpenGL.
Also, ich zeichne zuerst, sagen wir ein gelbes Rechteck als Hintergrund.
Dann zeichne ich eine Textur als Maske darüber: schwarzes Rechteck
mit weissem Kreis und gleichzeitig zb. folgende Textur: blaues Rechteck.
Der weisse Kreiss in der Maske soll diese Stelle im blauen Rechteck transparent machen, so dass nun im blauen Rechteck ein gelber Kreis zu sehen ist.Wie müssen nun die Faktoren in den beiden glBlendFunc-Aufrufen aussehen?
(zb. GL_ONE, GL_DST_COLOR...)
-
und was spraeche gegen einen alpha-kanal?
-
Wie macht man das genau?
Bisher sieht mein Code so aus:
glBegin(GL_POLYGON); //Hintergrund glColor4f(0.6f,0.4f,0.0f,1.0f); glVertex3dv(&V121.x); glVertex3dv(&V122.x); glVertex3dv(&V123.x); glVertex3dv(&V124.x); glEnd(); glEnable(GL_TEXTURE_2D); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBindTexture(GL_TEXTURE_2D,m_iTextur[10]); //Maske (weisses Rchteck, schwarzer Kreis) glBegin(GL_QUADS); glNormal3d(0.0, 0.0, 1.0); glTexCoord2d(0,0); glVertex3dv(&VTMaske1.x); glTexCoord2d(1,0); glVertex3dv(&VTMaske2.x); glTexCoord2d(1,1); glVertex3dv(&VTMaske3.x); glTexCoord2d(0,1); glVertex3dv(&VTMaske4.x); glEnd(); glTranslatef(-0.083f, 0.037f, 0.0f); glRotatef(-fKHwinkel,0.0f,0.0f,1.0f); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); glBindTexture(GL_TEXTURE_2D,m_iTextur[2]); //blaues Rechteck glBegin(GL_QUADS); glNormal3d(0.0, 0.0, 1.0); glTexCoord2d(0,0); glVertex3dv(&Vblau_21.x); glTexCoord2d(1,0); glVertex3dv(&Vblau_22.x); glTexCoord2d(1,1); glVertex3dv(&Vblau_23.x); glTexCoord2d(0,1); glVertex3dv(&Vblau_24.x); glEnd();Das Programm zeichnet so ein blaues Rechteck mit einem weissen Kreiss,
statt dem braunen Hintergrundkreis. Ich müsste eigentlich schwarz auf weiss
legen um Tranzparenz zu erzielen, aber das geht in diesem Fall nicht.
-
schreibe die durchsichtigkeitsinformation deiner maske in die alpha-komponente des screen-buffers und blende dein zweites polygon ueber GL_DST_ALPHA.