Frage

Ich brauche Photoshop Blending-Modi ( "multiplizieren", "Bildschirm" etc.) in meinem OpenGL ES 1.1-Code ( ohne Shadern).

nachahmen

Es gibt einige Dokumente, wie diese zu tun mit HLSL:

Ich brauche mindestens Arbeitsbildschirm-Modus.

Gibt es Implementierungen auf feste Pipeline ich kann aus?

War es hilfreich?

Lösung

Die meisten Photoshop blendmodes basieren auf den Porter-Duff blendmodes.

Diese

setzt voraus, dass alle Ihre Bilder (Texturen, renderbuffer) sind in premultiplied Farbraum. Dies wird in der Regel durch Multiplikation aller Pixel-Werte mit dem Alpha-Wert durchgeführt, bevor sie in einer Textur zu speichern. Z.B. ein vollständiges transparentes Pixel wird in nicht-premultiplied Farbraum wie schwarz aussehen. Wenn Sie mit diesem Farbraum nicht vertraut sind verbringt eine Stunde oder zwei im Web darüber zu lesen. Es ist ein ordentliches und gutes Konzept und für Photoshop-ähnliche Zusammensetzungen erforderlich.

Wie auch immer - einmal haben Sie Ihre Bilder in diesem Format Sie SCREEN ermöglichen kann mit:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR)

Der vollständige MULTIPLY-Modus ist nicht möglich, mit dem OpenGL | ES-Pipeline. Wenn Sie nur mit voller undurchsichtigen Pixeln arbeiten Sie fälschen kann es mit:

glBlendFunc(GL_ZERO, GL_SRC_COLOR)

Die Ergebnisse für transparente Pixel entweder in Ihrer Textur und Ihre Framebuffer werden zwar falsch sein.

Andere Tipps

Sie sollten versuchen, diese:

glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA)

Das sieht aus wie auf dem iPhone / OpenGL ES mir Multiplikation

Ihre beste Ort zu beginnen, ist eine Kopie des Red Book abholen und lesen Sie die Kapitel über die Material- und Blending-Modi. Es hat eine sehr umfassende und klare Erklärung, wie die ‚klassischen‘ OpenGL Blending-Funktionen arbeiten.

Ich habe festgestellt, dass die Verwendung dieses:

glDepthFun( GL_LEQUAL);

war alle brauchen einen Bildschirm-Effekt zu erhalten, zumindest es funktionierte gut auf meinem Projekt.

Ich bin nicht sicher, warum das funktioniert, aber wenn jemand weiß, bitte teilen.

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