Photoshop blending mode to OpenGL ES bez shaderów

Muszę naśladować tryby mieszania Photoshopa ("multiply"," screen " itp.) w moim kodzie OpenGL ES 1.1 (Bez shaderów).

Jest kilka dokumentów jak to zrobić z HLSL:

Potrzebuję przynajmniej trybu pracy ekranu.

Czy są jakieś implementacje na stałych rurociąg, na który mogę spojrzeć?

Author: bobobobo, 2009-05-04

4 answers

Większość trybów mieszania Photoshopa opiera się na modach mieszania Porter-Duff.

Wymaga to, aby wszystkie obrazy (tekstury, bufor renderowy) były wstępnie przeplatane w przestrzeni kolorów. Zwykle odbywa się to przez pomnożenie wszystkich wartości pikseli z wartością Alfa przed zapisaniem ich w teksturze. Np. w pełni przezroczysty piksel będzie wyglądał jak czarny w niepoprawionej przestrzeni kolorów. Jeśli nie znasz tej przestrzeni kolorów, poświęć godzinę lub dwie na czytanie o niej w Internecie. To schludny i dobry pomysł i wymagane dla kompozycji podobnych do Photoshopa.

W każdym razie - gdy już masz swoje zdjęcia w tym formacie możesz włączyć SCREEN używając:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR)

Tryb pełnego mnożenia nie jest możliwy w potoku OpenGL|ES. Jeśli pracujesz tylko z pełnymi nieprzezroczystymi pikselami, możesz je sfałszować używając:

glBlendFunc(GL_ZERO, GL_SRC_COLOR)

Wyniki przezroczystych pikseli w teksturze i buforze ramek będą jednak błędne.

 15
Author: Nils Pipenbrinck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-03 23:29:22

Powinieneś spróbować tego:

glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA)

Wygląda mi to na iPhone / OpenGL ES

 10
Author: Vlad Lego,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-01 19:52:58

Najlepszym miejscem na rozpoczęcie jest odebranie kopii Czerwonej Księgi i przeczytanie rozdziałów na temat materiałów i trybów mieszania. Ma bardzo obszerne i jasne wyjaśnienie, jak działają "klasyczne" funkcje mieszania OpenGL.

 1
Author: Cruachan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-03 22:58:54

Odkryłem, że używając tego:

glDepthFun( GL_LEQUAL);

Wszystko było potrzebne, aby uzyskać efekt ekranu, przynajmniej działało dobrze na moim projekcie.

Nie jestem pewien, dlaczego to działa, ale jeśli ktoś wie, proszę się podzielić.
 1
Author: h221baker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-24 17:01:30