Frage

Ich habe eine Textur OpenGL RGBA und ich blitten andere RGBA Textur auf ein Framebuffer-Objekt. Das Problem ist, dass wenn ich die übliche Mischung Funktionen mit glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA), die resultierende blit bewirkt, dass die Ziel-Textur-Alpha zu ändern, ist es leicht transparent für Orte machen, wo alpha vorher 1. war ich die Zieloberfläche Alpha möchte nie zu ändern, aber ansonsten ist der Effekt auf die RGB-Werte sollte genau wie mit GL_SRC_ALPHA und GL_ONE_MINUS_SRC_ALPHA. So Die Mischungsfaktor Funktionen sollten (As, As, As, 0) und (1-A 1-A 1-A, 1). Wie kann ich das erreichen?

War es hilfreich?

Lösung

Sie können die blend-Modi für RGB eingestellt und Alpha zu verschiedenen Gleichungen:

void glBlendFuncSeparate(
    GLenum srcRGB, 
    GLenum dstRGB, 
    GLenum srcAlpha, 
    GLenum dstAlpha);

In Ihrem Fall sollten Sie die folgenden Aufzählungen verwenden:

  glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ZERO, GL_ONE);

Beachten Sie, dass Sie müssen möglicherweise die glBlendFuncSeparate Funktion als Erweiterung importieren. Es ist sicher so, obwohl zu tun. Die Funktion ist für eine sehr lange Zeit herum. Es ist ein Teil von OpenGL 1.4

Eine andere Möglichkeit, das gleiche zu tun ist, um den Alpha-Kanal zu deaktivieren Schreiben glColorMask mit:

void glColorMask( GLboolean red,
                  GLboolean green,
                  GLboolean blue,
                  GLboolean alpha )

Es konnte sein viel langsamer als glBlendFuncSeparate weil OpenGL-Treiber, um die am häufigsten verwendeten Funktionen zu optimieren und glColorMask ist eines der selten verwendeten OpenGL-Funktionen.

Wenn Sie Pech haben Sie auch mit Software-Rendering-Emulation durch den Aufruf oddball Funktionen können am Ende: -)

Andere Tipps

Vielleicht könnten Sie glColorMask ()? Es läßt Sie aktivieren / deaktivieren Schreiben zu jedem der vier Farbkomponenten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top