Próbuję nauczyć się WebGL (z tego samouczka: http://learningwebgl.com/blog/?page_id=1217). Poszedłem za przewodnikiem, a teraz próbuję wprowadzić własne demo. Chcę utworzyć obiekt graficzny zawierający bufory i dane dla poszczególnych obiektów, które pojawią się w scenie. Obecnie mam bufor pozycji wierzchołków, bufor współrzędnych tekstury i bufor normalny. W samouczku używa innego bufora, bufora indeksu, ale tylko dla kostek. Do czego właściwie służy bufor indeksów? Czy powinienem go zaimplementować i czy jest on użyteczny dla czegoś innego niż kostki?Bufory indeksów w WebGL?
Odpowiedz
Wierzchołki twoich obiektów definiowane są przez pozycje w układzie współrzędnych 3D (euclidian coordinate system). Możesz więc wziąć co dwa kolejne wierzchołki i połączyć je z linią zaraz po tym, jak twoje układy współrzędnych 3D zostaną rzucone na rastr 2D (ekran lub jakiś docelowy obraz) przez rasterization process. Otrzymasz tzw. wireframe.
Problem szkielet jest to, że nie jest definitywna. Jeśli spojrzysz na sześcian szkieletowy pod określonymi kątami, nie możesz powiedzieć, w jaki sposób sześcian dokładnie się obraca. To dlatego, że musisz użyć visibility algorithms, aby określić, która część sześcianu jest bliżej pozycji obserwatora (pozycja kamery).
Ale same linie nie mogą definiować powierzchni, która jest konieczna do określenia, która strona sześcianu jest bliżej obserwatora niż inne. Najlepszym sposobem definiowania powierzchni w grafice komputerowej są wielokąty, dokładnie trójkąt (ma wiele wad na grafikę komputerową).
Więc masz teraz sześcian zdefiniowany przez trójkąty (więc zadzwoń do siatki trójkątów).
Ale jak zdefiniować których wierzchołki trójkąta formy? Przez bufor indeksu. Zawiera indeks do bufora wierzchołków (lista ze swoimi wierzchołkami) i informuje algorytm rasteryzacji, który tworzą trzy wierzchołki trójkąta. Istnieje wiele sposobów, w jaki sposób interpretować indeksy w buforze indeksu, aby zredukować powtarzanie tych samych wierzchołków (jeden wierzchołek może być częścią wielu trójkątów), niektóre z nich można znaleźć pod adresem article about graphics primitives.
Technicznie nie potrzebujesz bufora indeksowego. Istnieją dwa sposoby renderowania geometrii, z i glDrawElements
. glDrawArrays
nie używa bufora indeksu. Po prostu zapisujesz wierzchołki jeden po drugim w buforach, a następnie mówisz GL, co zrobić z elementami. Jeśli używasz GL_TRIANGLES
jako trybu połączenia, musisz umieścić trzykrotnie dane (wierzchołki, normalne, ...) w buforach, więc gdy wierzchołek jest używany wiele razy, musisz dodać do buforów wiele razy.
glDrawElements
może służyć do przechowywania wierzchołka, a następnie użycia go kilka razy. Jest jednak jeden haczyk, zestaw parametrów dla pojedynczego indeksu jest stały, więc jeśli masz wierzchołek, w którym potrzebujesz dwóch różnych normaliów (lub innego atrybutu, takiego jak współrzędne tekstury lub kolory), musisz zapisać go dla każdego zestawu właściwości .
W przypadku kulek glDrawElements
ma wiele sensu, ponieważ parametry są zgodne, ale w przypadku kostki wartości normalne są różne, powierzchnia przednia wymaga innej normalnej niż powierzchnia górna, ale położenie dwóch wierzchołków jest takie samo . Wciąż musisz umieścić pozycję w buforze dwa razy. W tym przypadku może być sensowne: glDrawArrays
.
To zależy od danych, które potrzebuje mniej połączeń danych, ale glDrawElements
jest bardziej elastyczny (jak zawsze można symulować glDrawArrays
buforem indeksu, który zawiera numery 0, 1,2, 3, 4, ...).
- 1. 3 bufory indeksów
- 2. tom topienia w WebGL
- 3. Renderuj WebGL w Xfvb
- 4. WebGL Framework
- 5. C++ bufory cout i cin oraz bufory ogólnie
- 6. Bufory protokołów z JPA
- 7. vim bufory copy-paste
- 8. Jak wykryć kolizję w webgl?
- 9. Jak konsoleta.log w shadery webgl?
- 10. Debugowanie kodu GLSL w webgl
- 11. Zbyt wiele indeksów w RavenDBZbyt wiele indeksów w RavenDB
- 12. Aplety JOGL a WebGL
- 13. Biblioteka WebGL i Tesselacja?
- 14. WebGL - Niepoprawna operacja useProgram
- 15. Usuwanie kontekstów WebGL
- 16. Wyciągi WebGL poza zasięgiem?
- 17. phantomjs kompilacja z webGL
- 18. Jak dołączyć bufory protokołów w Swift?
- 19. Sprawdzanie, czy bufory zostały przepłukane w R
- 20. Korzystanie z Google "Bufory protokołów" w Arduino
- 21. Pule pamięci i bufory C++
- 22. Scala Akka i bufory protokołów
- 23. Bufory z Androidem i protokołami
- 24. Bufory protokołów Google i HTTP
- 25. Konwersja wektora indeksów w macierz
- 26. Domyślny analizator indeksów w elasticssearch
- 27. Unikalna konwencja indeksów w EF6
- 28. Najszybszy sposób na wywoływanie wsadowe w WebGL
- 29. zalecany sposób tworzenia HUDa 2d w webgl
- 30. Jak zaimplementować tę spiralę obrotową w WebGL?
Dziękuję za jasne i szczegółowe wyjaśnienie! Właśnie tego szukałem. – Sefu