2010-09-03 10 views
5

Ich zeichne einige Texturen mit Alpha-Kanal, aber wenn sie angezeigt werden, sieht es aus wie der Alpha-Kanal ist nur binär. Ein Pixel ist also entweder transparent oder opak, obwohl das Pixel in der Texturdatei selbst halbtransparent ist. Die Mischung ist wie folgt eingerichtet:android/opengles alpha Texturen nicht halbtransparent aber binär transparent

gl.glEnable(GL10.GL_BLEND); 
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA); 

Gibt es eine Problemumgehung für dieses Problem?

Die oben zeigt, wie es sein sollte, und das zeigt, wie es ist:

alt text

+0

Was internalFormat sind Sie in dieser Textur verwenden? –

+0

PNG mit Transparenz – clamp

+0

Kann ich mehr Informationen über das PNG erhalten? Wie war es gerettet? –

Antwort

3

Try this:

gl.glEnable(GL10.GL_BLEND);  
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 

gl.glEnable(GL10.GL_ALPHA_BITS); 
//draw... 
gl.glDisable(GL10.GL_ALPHA_BITS); 
+0

Danke dafür. In meinem Fall funktioniert es jedoch auch ohne GL_ALPHA_BITS Aufrufe –

1

Es scheint, wie es Alpha-Test anstelle von Alpha-Blending ist verwenden, die die Schwellwertbildung Verhalten erklären würde. Obwohl es nicht standardmäßig aktiviert ist, kann es sich lohnen, zu versuchen:

gl.glDisable(GL10.GL_ALPHA_TEST); 
+0

Alpha-Test ist bereits deaktiviert und ich auch Tiefe sortiere alle Objekte, die ich anstreiche – clamp

0

Welche Oberfläche Format sind Sie für Ihre GLSurfaceView verwenden? Ist es ein transluzentes (nicht transparentes) Format?

surfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); 

Auch die EGL-Einstellungen müssen Alpha-Unterstützung gesetzt haben. Dies gibt Ihnen die beste Qualität ...

surfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); 

Edit: Ein anderer Gedanke ist, dass vielleicht haben Sie nicht das Bild zu OpenGL in einem durchscheinenden Format mit glTexImage2D hochladen?

0

Speichern Sie das PNG in einer GL-Textur, die nur 1 Bit Alpha hat, z. B. 16-Bit 5-5-5-1-Format? Dies würde das obige Verhalten verursachen.