Mode de fusion Photoshop vers OpenGL ES sans shaders
J'ai besoin d'imiter les modes de fusion de Photoshop ("multipliez-vous", "écran",...). dans mon OpenGL ES 1.1 code (sans shaders).
Il y a quelques docs sur la façon de faire avec HLSL:
- http://www.nathanm.com/photoshop-blending-math/(archive)
- http://mouaif.wordpress.com/2009/01/05/photoshop-math-with-glsl-shaders/
J'ai besoin au moins de travail de l'Écran mode.
Existe-il des implémentations sur pipeline fixe, je peut regarder?
source d'informationauteur Alexander Gladysh
Vous devez vous connecter pour publier un commentaire.
Plus photoshop mélange-les modes sont basées sur le Portier-Duff blendmodes.
Ces exige que toutes vos images (textures, renderbuffer) sont en couleur prémultipliées-espace. Ceci est habituellement fait par la multiplication de tous les pixels de valeurs avec l'alpha-valeur avant de les ranger dans une texture. E. g. un plein de pixel transparent ressemble en noir hors-couleur prémultipliées de l'espace. Si vous n'êtes pas familier avec cette couleur-espace passer une heure ou deux de lecture à ce sujet sur le web. C'est un très joli et bon concept et nécessaire pour photoshop-like compositions.
De toute façon une fois que vous avez vos images dans ce format, vous pouvez activer l'ÉCRAN à l'aide de:
Le plein de mode MULTIPLIER n'est pas possible avec l'OpenGL|ES pipeline. Si vous travaillez seulement avec les pixels opaques, vous pouvez faux à l'aide de:
Les résultats pour les pixels transparents, soit dans la texture de vos cheveux et de votre framebuffer sera mal.
vous devriez essayer ceci:
Cela ressemble à multipliant à moi sur l'iPhone /OpenGL ES
Votre meilleur endroit pour commencer est de prendre une copie de la Livre Rouge et de lire les chapitres sur les matériaux et les modes de fusion. Il a un très complète et claire explication de la façon la plus "classique" OpenGL fusion des fonctions de travail.
J'ai trouvé que l'utilisation de ce:
glDepthFun( GL_LEQUAL);
a tous besoin d'obtenir un effet écran, au moins, il a bien travaillé sur mon projet.
Je ne suis pas sûr de savoir pourquoi cela fonctionne, mais si quelqu'un sait s'il vous plaît partager.