Model szkieletowy OpenGL

18

Nie, nie szukam glPolygonMode. Poszukuję metody, być może modułu cieniującego GLSL, który wytworzyłby obiekty w stylu retro w postaci szkieletów. Jakieś sugestie?

Coś takiego jak czołgi wektorowe.

http://toucharcade.com/wp-content/uploads/2009/01/picture-111-300x204.png

Najlepiej, jeśli rozwiązanie powinno działać również w OpenGL ES 2.0.

Doceniamy wszelkie wskazówki i wskazówki (o ile nie NULL)!

Kornel Kisielewicz
źródło

Odpowiedzi:

5

Zdecydowanie polecam używanie tekstur, jak powiedział Dave. Może to być trochę bolesne, ale myślę, że zapewniłoby znacznie lepszą wydajność.

Możesz spróbować wyszukać algorytmy wykrywania krawędzi . Jeśli utworzysz siatki za pomocą kolorowania wierzchołków jednolitymi kolorami i średnimi wartościami alfa (dla niewielkiej przezroczystości), a następnie użyjesz modułu cieniującego wykrywanie krawędzi, może to wyglądać wystarczająco dobrze. Nie byłoby tak samo, ale może ci się to jeszcze bardziej podobać; albo może nie.

W przeciwnym razie możesz patrzeć na rozwiązanie dwuprzebiegowe, rysując półprzezroczyste wielokąty (ponownie, ustaw kolory wierzchołków na jednolity kolor ze średnią wartością alfa), a następnie ustaw glPolygonMode (GL_LINE) i dostosuj glLineWidth zgodnie z potrzebami (być może w oparciu o obiekt odległość) i ponownie narysuj wielokąty.

Jest trochę późno i trudno mi się z tym zapoznać, ale dyskusja na forum wskazuje na ten PDF: Single-pass Rendering . Przepraszam, jeśli to nie ma znaczenia.

Ricket
źródło
+1: byłoby łatwiej, gdybym znalazł sposób na wygenerowanie tekstur. Nie można użyć glPolygonMode z powodu późniejszego celowania w OpenGL ES (iStuff).
Kornel Kisielewicz
2

Wiem, że prawdopodobnie nie tego szukasz, ale wygląda na to, że Vector Tanks po prostu używa teksturowanych modeli. Tekstura nadaje ramce drucianej, działa na moim iPodzie touch, który nie obsługuje shaderów.

Dave
źródło
Wiem, wiem, ale mogłem też wkleić zdjęcia Subversion i wcale nie używa tekstur (AFAIK)
Kornel Kisielewicz
2

Jedyny sposób, w jaki to widziałem, to tekstury o wysokiej rozdzielczości, głównie czarne, takie jak te w Tron 2.0. Ich tekstury są prawie uniwersalnie albo płaską czernią z grubą, kolorową ramką, albo prostą teksturą szumu Perlina.

Zastosowali prostą obróbkę końcową, aby uzyskać efekt blasku.

greyfade
źródło
+1: Znałem artykuł, ale dziękuję za przypomnienie - to naprawdę dobry artykuł (i pomaga w drugim problemie, który miałem - świecić).
Kornel Kisielewicz
1

Możesz wypróbować jakąś prostą funkcję odległości w module cieniującym piksele. Być może coś w rodzaju współrzędnych barycentrycznych (przechowuj różne RGB na wierzchołkach, a rasteriser wykona za ciebie większość pracy).

Wtedy twój moduł cieniujący pikseli będzie miał potrzebne informacje o tym, gdzie na wielokącie znajduje się bieżący piksel - w pobliżu wierzchołka, w pobliżu krawędzi lub w środku ...

Podejrzewam, że w praktyce łatwiej byłoby to teksturować.

JasonD
źródło
1

A co powiesz na to: weź swój model i fazuj krawędzie, które mają się pojawiać jako kontury. Pokoloruj twarze, które zostały utworzone za pomocą jasnej, nieprzezroczystej zieleni, podczas gdy wszystkie stare twarze są ciemne, półprzezroczyste zielone.

Nie wymaga to wcale korzystania z shaderów pikseli. (W rzeczywistości nie ma też tekstur; po prostu kolory twarzy). Wymaga to wstępnego przetworzenia modelu z twojej strony, co może, ale nie musi być problemem.

Kontur nie będzie widoczny, gdy powierzchnia fazowana jest prostopadła do widoku. Jeśli Ci to przeszkadza, możesz nieco wyciągnąć fazowaną powierzchnię, kolorując wytłoczenie tak, jakbyś miał fazę. Możesz bawić się z różnymi stopniami fazowania i wytłaczania, aby tworzyć cieńsze i grubsze linie.


źródło