Wiem, że odpowiedź na to pytanie może wydawać się łatwa, ale doprowadza mnie to do szału. Istnieje zbyt wiele możliwych sytuacji, z którymi powinien sobie poradzić dobry mechanizm mieszania alfa, a dla każdego algorytmu mogę coś wymyślić.
Oto metody, o których myślałem do tej pory:
Najpierw pomyślałem o sortowaniu obiektów według głębokości, ten po prostu zawodzi, ponieważ Obiekty nie są prostymi kształtami, mogą mieć krzywe i mogą zapętlić się między sobą. Więc nie zawsze mogę powiedzieć, który z nich jest bliżej aparatu.
Potem pomyślałem o sortowaniu trójkątów, ale ten też może się nie powieść, ale nie jestem pewien, jak to zaimplementować, jest rzadki przypadek, który może ponownie spowodować problem, w którym dwa trójkąty przechodzą przez siebie. Znów nikt nie może powiedzieć, który jest bliżej.
Następną rzeczą było użycie bufora głębokości, przynajmniej głównym powodem, dla którego mamy bufor głębokości, są problemy z sortowaniem, o których wspomniałem, ale teraz pojawia się inny problem. Ponieważ obiekty mogą być przezroczyste, w jednym pikselu może być widoczny więcej niż jeden obiekt. Więc dla którego obiektu należy przechowywać głębokość pikseli?
Pomyślałem wtedy, że może mogę zapisać tylko największą głębokość obiektu z przodu, i używając tego określam, jak mam mieszać kolejne wywołania rysowania przy tym pikselu. Ale znowu był problem, pomyśl o dwóch półprzezroczystych płaszczyznach z jednolitą płaszczyzną pośrodku. Na końcu miałem wyrenderować płaszczyznę bryłową, widać najodleglejszą płaszczyznę. Zauważ, że zamierzałem scalać co dwie płaszczyzny, dopóki nie pozostanie tylko jeden kolor dla tego piksela. Oczywiście mogę również stosować metody sortowania z tych samych powodów, które wyjaśniłem powyżej.
Wreszcie jedyną rzeczą, jaką wyobrażam sobie jako zdolną do pracy, jest renderowanie wszystkich obiektów w różne cele renderowania, a następnie sortowanie tych warstw i wyświetlanie ostatecznego wyniku. Ale tym razem nie wiem, jak mogę zaimplementować ten algorytm.