Ich habe jetzt mehr als einen Tag investiert, um eine Lösung zu finden, wie man transparente Texturen mit OpenGL auf Android rendern kann. Offensichtlich hatten andere mehr Glück als ich, aber nachdem ich verschiedene Lösungen (z. B. Transparent texture in OpenGL ES for Android) ausprobiert habe, kann ich es immer noch nicht schaffen.Probleme beim Anzeigen von transparenten Texturen mit OpenGL ES auf Android
Hier ist meine Grundeinstellung:
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
gl.glClearColor(0.0f, 0.0f, 0.0f, 1);
gl.glShadeModel(GL10.GL_FLAT);
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glDisable(GL10.GL_DITHER);
gl.glDisable(GL10.GL_LIGHTING);
gl.glTexEnvx(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,
GL10.GL_MODULATE);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glViewport(0, 0, w, h);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluOrtho2D(gl, -ratio, ratio, -1, 1);
Die Texturen über ...
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureName);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
GL10.GL_CLAMP_TO_EDGE);
gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,
GL10.GL_MODULATE);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
geladen werden ... und es gibt Hinweise darauf, dass dies zu Problemen aufgrund führt alpha vormultipliziert . Aber ReplicaIsland verwendet auch die GLUtils-Funktion und das Spiel scheint keine Probleme mit transparenten Bildern zu haben.
Jetzt, wenn ich Texturen mit Alpha-Kanal (PNG) zeichnen, erscheinen sie solide schwarz. Texturen ohne Alpha werden in ihrer jeweiligen Farbe korrekt gezeichnet). Ich bewarb mich verschiedene glBlendFunc ohne Glück nennt, heißt
gl.glShadeModel(GL10.GL_FLAT);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glColor4x(0x10000, 0x10000, 0x10000, 0x10000);
Ich habe auch dieses ein ein
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
Das Ergebnis versuchen immer, dass die Texturen überhaupt nicht sichtbar sind (vollständig transparent?).
Bilder zum Testen werden vom ReplicaIsland-Projekt verwendet, dies sind Standard-PNGs. Dies bedeutet auch, dass die verwendeten Texturen der Power-of-2-Regel entsprechen - eine weitere Lösung, die in verschiedenen Posts angeboten wird. Ich sehe einen Unterschied darin, dass ReplicaIsland hauptsächlich auf die draw_texture-Erweiterung angewiesen ist, während ich VBOs verwenden muss (um Rotationen anwenden zu können).
Hilfe würde sehr geschätzt werden! Danke Ben