C++ i opengl - ustawienie przezroczystości

0

Cześć.

Zacznę o wyjaśnienia - nie jestem zawodowym programistą ale coś tam czasem sobie programuję. Piszę aktualnie aplikację w c++ z wykorzystaniem qt, do wyświetlania grafiki używam opengl. Szczerze mówią, nie jestem znawcą opengl i w pewnym sensie skorzystałem z przykładu i przerobiłem go na swoje potrzeby. I teraz do rzeczy. Aplikacja wyświetla pewne elementy (nazwijmy to operacje), gdzie każda operacja składa się z wielu innych elementów (nazwijmy je kształtami) rysowanych jeden za drugim. Kształty w ramach jednej operacji mogą się nakładać. I teraz chciałbym, aby każda operacja wyświetlana była z uwzględnieniem przezroczystości, tak aby widać było nawet te, które się nakładają. Problem w tym, że jak uruchomię przezroczystość, to nie widzę każdej operacji jako osobny element lecz każdy kształt w operacji, bo skoro się nakładają to je widać.

Podam przykład, aby lepiej wyjaśnić o co mi chodzi:

image

Element czerwony (jasnoczerwony) to jest tak jakby obrys elementu czarnego. Cały obrys to jest ta wspomniana operacja, natomiast jeden obrys składa się z wielu kształtów i własnie widać je tutaj, jak nakładają sie na siebie.

A ja potrzebowałbym, aby w ramach danej operacji kolor był ten sam (czyli bez widocznej przezroczystości miedzy jednym kształtem a drugim) jednak aby operacje między sobą zachowywały przezroczystość.

Czy ktoś mógłby podpowiedzieć jak to uruchomić?

Aktualnie robię tak:

glEnable(GL_BLEND);
glDepthMask( GL_FALSE );
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

pętla z ilością operacji
{
pętla z ilością kształtów w operacji
{
Wyświetlenie kształtu.
}
}

glDepthMask( GL_TRUE );
glDisable( GL_BLEND );

0

Rozpisałeś się a właściwie nie wiadomo o co ci chodzi.. Czy to co jest na obrazku to efekt który chcesz uzyskać, czy który uzyskujesz a ma być jakoś inaczej?

Jeśli nie ma być tych czerwonych przebarwień na "zakrętach" - to tak się dzieje kiedy wielokrotnie nakładasz na siebie przezroczyste elementy. Rozwiązanie jakie przychodzi mi na myśl to renderować te kształty bez przezroczystości do tekstury, którą potem nałożyć na ekran za jednym zamachem, tym razem z wymuszoną przezroczystością.

0
Azarien napisał(a):

Rozpisałeś się a właściwie nie wiadomo o co ci chodzi.. Czy to co jest na obrazku to efekt który chcesz uzyskać, czy który uzyskujesz a ma być jakoś inaczej?

Na obrazku jest to, co uzyskuję, czyli elementy nachodzące na siebie w ramach jednej operacji są widoczne w miejscu nachodzenia a ja chciałbym aby to wyglądało w ten sposób, że jeden obrys (operacja) jest ciągła w jednym kolorze a druga w drugim i między nimi było widać, która jest na górze.

0

Ty to wyświetlasz 3D? Te czerwone obiekty to "rury"?
Powinieneś zadbać o to, żeby w ramach jednego czerownego obrysu, pod wyświetlanymi wielokątami nie było innych.
Najlepiej jakby Twój obrys był płaszczyzną. Przy generowaniu takiej płaszczyzny, może Ci się przydać: http://alienryderflex.com/polygon_inset/
Tylko zamiast przesuwać wierzchołki do środka, przesuwaj na zewnątrz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1