Z góry
Ok, więc zebrałem do tej pory:
- nie używaj stałego potoku (przestarzałe lub będzie przestarzałe)
- vbos przechowują „modele obiektowe” (głównie n danych danych wierzchołków)
- vaos opisują, jak układane są dane, aby rysowanie wywołań wiedziało, jaka część każdego vbo jest dla jakiego rodzaju informacji o wierzchołku (jedno vao może odnosić się do wielu vbos, przeciwnie jest trochę trudne)
- każde wywołanie losowania wysyła również dane wierzchołków do shaderów
Jak widzę 3D (opcjonalnie)
Biorąc pod uwagę te informacje, widzę, jak rysowanie skomplikowanych obiektów 3D jest bardzo przyjemne w nowoczesnym OpenGL. Zasadniczo ładujesz kilka modeli obiektów (prawdopodobnie z Blendera lub innego podobnego oprogramowania) do VBO z lokalnymi współrzędnymi, a następnie po prostu podajesz dla każdego wystąpienia obiektu inny parametr shadera (przesunięcie), aby rysować w przestrzeni świata.
Problem / pytanie
W 2D problemy i priorytety są jednak zupełnie inne. Nie rysujesz zbyt skomplikowanych obiektów, nie potrzebujesz skomplikowanych matryc projekcyjnych, a whatnot i shadery są znacznie prostsze.
Jaki byłby najlepszy sposób rysowania często (naprawdę często, zasadniczo każdej ramki) zmieniającej się geometrii za pomocą nowoczesnego OpenGL?
W następnym akapicie możesz zobaczyć kilka pomysłów na problemy (problem z okręgiem i prostokątem), które lepiej identyfikują zmiany, którymi jestem zainteresowany.
Moje próby (opcjonalnie)
Zacząłem więc zastanawiać się, jak poradzić sobie z rysowaniem podstawowej geometrii 2D na ekranie:
- kwadrat: załaduj
[(1, 0), (1, 1), (0, 1), (0, 0)]
VBO dla geometrii kwadratu w przestrzeni lokalnej, a następnie podaj modułowi cieniującemu rzeczywistą szerokość kwadratu oraz współrzędne świata i informacje o kolorze
chłodzi, wygląda łatwo. Przejdźmy do kręgu:
- koło: wachlarz trójkąta z ... eh. ile precyzji (liczba wierzchołków)? dla małych kół precyzja musi być mała, a dla błędnych kół precyzja musi być wysoka. Wyraźne załadowanie 1 VBO prawdopodobnie nie pasuje do wszystkich przypadków. Co się stanie, jeśli będę musiał dodać precyzję, ponieważ rozmiar okręgu jest większy?
Mniej fajne. Przejdźmy do czegoś nieco prostszego, prostokąta:
- prostokąt: eh. nie ma „ogólnej geometrii prostokąta”. Po prostu masz proporcje szerokość / wysokość i to wszystko, ale każdy prostokąt jest prawdopodobnie inny, jeśli zmienia się rozmiar.
Jak widać, stamtąd wszystko idzie w dół. Zwłaszcza ze złożonymi wielokątami i tak dalej.
Brak zasad kodu: P
Potrzebuję tylko przeglądu tego pomysłu, nie jest potrzebny żaden kod, zwłaszcza kod C lub C ++. Po prostu powiedz coś takiego: „utwórz VBO z tymi danymi wierzchołków, a następnie powiąż go, ...”.