Hallo zusammen,
ich habe versucht das sogenannte Alpha Blending einzubauen. Die Tischplatte wird einmal ohne und einmal mit Alpha Blending in eine DisplayListe geschrieben. Das Alpha Blending funktioniert soweit ganz gut, nur habe ich das Gefühl das auch die anderen Objekte beeinflusst werden. Ich zeichne die Tischplatte allerdings nach allen anderen Objekten.
Was könnte hier noch schiefgelaufen sein ?
ich habe versucht das sogenannte Alpha Blending einzubauen. Die Tischplatte wird einmal ohne und einmal mit Alpha Blending in eine DisplayListe geschrieben. Das Alpha Blending funktioniert soweit ganz gut, nur habe ich das Gefühl das auch die anderen Objekte beeinflusst werden. Ich zeichne die Tischplatte allerdings nach allen anderen Objekten.
Was könnte hier noch schiefgelaufen sein ?
Code:
private void drawScene(GL gl, boolean select)// Hier kommt der ganze Zeichnen-Kram hin
{
gl.glPushMatrix();
gl.glTranslated(0,-4,-6);
if (tisch_texture){gl.glCallList(tisch);} // Tisch zeichnen
else{gl.glCallList(tisch2);}
gl.glPopMatrix();
}
Code:
// Tischplatte
tischplatte2 = gl.glGenLists(1);
gl.glNewList(tischplatte2, GL_COMPILE);
gl.glColor4f(1.0f,1.0f,1.0f,0.5f);// Volle Helligkeit, 50% Alpha ( NEU )
gl.glBlendFunc(GL_SRC_ALPHA,GL_ONE);// Blending Funktion für Durchsichtigkeit basiered auf dem Quell Alpha Wert ( NEU )
gl.glEnable(GL_BLEND); //Turn Blending On
gl.glDisable(GL_DEPTH_TEST); // Turn Depth Testing Off
gl.glEnable(GL_TEXTURE_2D);
text_tischplatte2.bind();
w = 6+6;
h = 3+3;
xOffset = -6;
yOffset = -3;
segments = 200;
for (int x=0; x<segments; x++) {
for (int y=0; y<segments; y++) {
// Relative Positionen der 4 Eckpunkte, alle zwischen 0 und 1
float rx0 = x * (1.0f / segments);
float ry0 = y * (1.0f / segments);
float rx1 = (x+1) * (1.0f / segments);
float ry1 = (y+1) * (1.0f / segments);
// Positionen der Expunkte des Rechtecks im Raum
float x0 = xOffset + rx0 * w;
float y0 = yOffset + ry0 * h;
float x1 = xOffset + rx1 * w;
float y1 = yOffset + ry1 * h;
gl.glBegin(GL_POLYGON);
gl.glNormal3f( 0.0f, 1.0f, 0.0f);
gl.glTexCoord2f(rx0,ry1); gl.glVertex3f(x0, -3.0f, y1); //Punkt hinten links
gl.glTexCoord2f(rx0,ry0); gl.glVertex3f(x1, -3.0f, y1); //Punkt hinten rechts
gl.glTexCoord2f(rx1,ry0); gl.glVertex3f(x1, -3.0f, y0); //Punkt vorne rechts
gl.glTexCoord2f(rx1,ry1); gl.glVertex3f(x0, -3.0f, y0); // Punkt vorne links
gl.glEnd();
}
}
gl.glDisable(GL_TEXTURE_2D);
gl.glDisable(GL_BLEND); // Schalte Blending aus
gl.glEnable(GL_DEPTH_TEST); // Schalte Depth Testing an
gl.glEndList();