2012-09-19 8 views
6

dla celów uczenia się zdecyduję narysować sferę pomocą 3 metodIBO gorzej niż GL_TRIANGLE_STRIP?

  1. Lista wyświetlanych
  2. Voa VBO (GL_TRIANGLE_STRIPE)
  3. Vao VBO i Ibo (GL_TRIANGLES)

Czytałem, że przy użyciu ibo sprawia, że ​​program działa szybciej, ale czy to naprawdę prawda? Dla sfery 100 plasterków i 100 stosów 2. metoda wytwarza 40400 wierzchołków, a trzecia "tylko" 19802. Dzięki temu zapisuję 20598vertices po 32 bajty = 659136 bajtów.

  1. verticesSize = (plastry * 4) * (stosy + 1);

  2. IBO verticesSize = (plasterki * 2) * (stosy -1) +2;

Muszę jednak zrobić tablicę wskaźników, które w tym przypadku jest rozmiar 118800 (liczba wskaźników potrzebnych do stworzenia wszystkie twarze) * 4 (rozmiar unsigned int) = 475200 bajtów! 2. Podczas gdy metody powoduje 1000 kulki z 15 klatek, 3. powoduje 1000 ledwie 6pfs

  1. Czy konwersji indeksu tablicy z GL_TRIANGLES do GL_TRIANGLE_STRIP zapewnia bardziej efektywny sposób, a następnie 2-ga metoda?
  2. Czy renderowanie kuli za pomocą ibo jest złym pomysłem?
  3. Dlaczego jest wolniejsza? Czy kolejność w tablicy indeksów ma jakąkolwiek rolę?

Albo pisałam kod całkowicie błędne i dlatego walczy tyle :( Jeśli ktoś jest zainteresowany, tutaj jest mój kod http://pastebin.com/raw.php?i=74jLKV5M

+0

Kolejność indeksów może i ma znaczenie, ma to związek z pamięcią podręczną pobierania wierzchołków. Ale to może nie być to, pozwól mi sprawdzić kod i wrócić do ciebie – Hannesh

Odpowiedz

1

W glDrawElements nawiązane jest źle. Parametr liczba powinna być liczba indeksów, a nie liczba razy 4. Spróbuj to zmienić:

Używanie indeksów zamiast pasków trójkątów powinno być prawie zawsze szybsze, w rzeczywistości nie byłbym zaskoczony, gdyby sterownik wykorzystywał wskaźniki za kulisami do renderowania trójkąta paski także.

Również, jak wspomniałem w komentarzach, kolejność, w jakiej masz swoje indeksy, może wpłynąć na wydajność. Jednak dla twojej sfery wzór indeksowania, z którego korzystasz, jest prawdopodobnie najbardziej optymalny, a mimo to różnica, którą tworzy, jest niewielka.

Powiązane problemy