Estou usando o OpenGL ES 2.0. Tenho um monte de quads para desenhar, gostaria de poder passar apenas 4 vértices por quad como se estivesse usando GL_QUADS, mas basicamente só quero saber a melhor maneira de desenhar um monte de quads separados.
Até agora, o que descobri que eu poderia fazer: -GL_TRIANGLES (6 vértices por quadrilátero) -Generar GL_TRIANGLE_STRIP (6 vértices por quadrilátero)
Possibilidades que encontrei: -GL_TRIANGLE_STRIPS com um valor de índice especial que redefine a faixa quádrupla (isso significaria 5 índices por quad, mas acho que isso não é possível é o OpenGL ES 2.0)
3, 4,
4, 5, 6, 7}. Os triângulos degenerados são3,3,4
e3,4,4
. Vale a pena fazer isso? Não, a menos que seus quadríceps tendam a aparecer em pares (ou mais) com arestas comuns. Se o 2º quad é {3, 2, 4, 5}, a tira é{0,1,3,2,5,4}
.{0,1,2, 0,2,3, 4,5,6, 4,6,7}
ou é igualmente bom{0,1,2, 2,3,0, 4,5,6, 6,7,4}
. Boa classe para ajudar este é glText-Android / SpriteBatchO uso de buffers de índice não é necessariamente mais rápido, conforme indicado nos documentos da Apple: "Para obter o melhor desempenho, seus modelos devem ser enviados como uma única faixa triangular não indexada usando glDrawArrays" .
Portanto, embora a
GL_TRIANGLE_STRIP
a faça em 4 vértices sem a necessidade de um buffer de índice, e você possa usar um buffer de índice, é muito ruim tentar "salvar" a repetição de 2 vértices . Por esse motivo, sugiro que você desenhe 2 separadosGL_TRIANGLES
e repita os 2 vértices na diagonal .fonte
O grande ganho na área de trabalho é mover os dados para os VBOs GL_STATIC_DRAW. Presumivelmente, isso também é verdade na GPU MBX do iPhone.
fonte
Usar
GL_TRIANGLE_FAN
para um quad usa 4 vértices, não 6.fonte
GL_TRIANGLE_STRIP
, como outras respostas já apontaram.