Korzystam z OpenGL ES 2.0 Mam kilka quadów do narysowania, chciałbym móc przejść tylko 4 wierzchołki na quad, tak jakbym korzystał z GL_QUADS, ale w zasadzie chcę po prostu poznać najlepszy sposób rysowania kilka osobnych quadów.
Do tej pory mogłem to zrobić: -GL_TRIANGLES (6 wierzchołków na quad) -Degeneracja GL_TRIANGLE_STRIP (6 wierzchołków na quad)
Znalazłem możliwości: -GL_TRIANGLE_STRIPS ze specjalną wartością indeksu, która resetuje pasek quad (oznaczałoby to 5 indeksów na quad, ale nie sądzę, że jest to możliwe, OpenGL ES 2.0)
3, 4,
4, 5, 6, 7}. Zdegenerowane trójkąty to3,3,4
i3,4,4
. Czy warto to robić? Nie, chyba że twoje quady mają tendencję do parowania (lub więcej) ze wspólnymi krawędziami. Jeśli 2-ty kwadrant to {3, 2, 4, 5}, to pasek jest{0,1,3,2,5,4}
.{0,1,2, 0,2,3, 4,5,6, 4,6,7}
lub równie dobry jest{0,1,2, 2,3,0, 4,5,6, 6,7,4}
. Dobra klasa, która może to pomóc, to glText-Android / SpriteBatchKorzystanie z buforów indeksu niekoniecznie jest szybsze, jak wskazano w dokumentach Apple: „Aby uzyskać najlepszą wydajność, modele należy przesyłać jako pojedynczy nieindeksowany pasek trójkąta za pomocą glDrawArrays” .
Tak więc, podczas gdy a
GL_TRIANGLE_STRIP
zrobi to w 4 wierzchołkach bez potrzeby buforowania indeksu, a ty możesz użyć bufora indeksu, dość kiepskie jest próbowanie „zapisania” powtarzania 2 wierzchołków . Z tego powodu sugeruję narysowanie 2 osobnychGL_TRIANGLES
i powtórzenie 2 wierzchołków na przekątnej .źródło
Dużym zyskiem na pulpicie jest przeniesienie danych do VBO GL_STATIC_DRAW. Przypuszczalnie dotyczy to również GPU MBX iPhone'a.
źródło
Korzystanie
GL_TRIANGLE_FAN
z quada używa 4 wierzchołków, a nie 6.źródło
GL_TRIANGLE_STRIP
, jak już wskazały inne odpowiedzi.