Saya menggunakan OpenGL ES 2.0. Saya memiliki banyak quads untuk digambar, akan senang untuk dapat melewati hanya 4 simpul per quad seolah-olah saya menggunakan GL_QUADS, tetapi pada dasarnya saya hanya ingin tahu cara terbaik menggambar sebuah sekelompok paha depan yang terpisah.
Sejauh ini apa yang saya temukan dapat saya lakukan: -GL_TRIANGLES (6 simpul per quad) -Deregenerasi GL_TRIANGLE_STRIP (6 simpul per quad)
Kemungkinan yang saya temukan: -GL_TRIANGLE_STRIPS dengan nilai indeks khusus yang me-reset quad strip (ini berarti 5 indeks per quad, tapi saya rasa ini tidak mungkin adalah OpenGL ES 2.0)
3, 4,
4, 5, 6, 7}. Segitiga yang merosot adalah3,3,4
dan3,4,4
. Apakah layak melakukan ini? Tidak, kecuali paha depan Anda cenderung berpasangan (atau lebih) dengan tepi yang sama. Jika quad kedua adalah {3, 2, 4, 5} maka strip adalah{0,1,3,2,5,4}
.{0,1,2, 0,2,3, 4,5,6, 4,6,7}
atau sama baiknya{0,1,2, 2,3,0, 4,5,6, 6,7,4}
. Kelas yang bagus untuk membantu ini adalah glText-Android / SpriteBatchMenggunakan buffer indeks tidak selalu lebih cepat, seperti yang ditunjukkan dalam dokumen Apple, "Untuk kinerja terbaik, model Anda harus diserahkan sebagai strip segitiga tidak terindeks menggunakan glDrawArrays" .
Jadi, sementara a
GL_TRIANGLE_STRIP
akan melakukannya dalam 4 simpul tanpa memerlukan buffer indeks, dan Anda dapat menggunakan buffer indeks, itu cukup lemah untuk mencoba "menyimpan" mengulangi 2 simpul . Untuk alasan ini, saya sarankan Anda menggambar 2 terpisahGL_TRIANGLES
dan ulangi 2 simpul pada diagonal .sumber
Keuntungan besar pada desktop adalah memindahkan data ke GL_STATIC_DRAW VBOs. Agaknya ini juga berlaku pada GPU MBX iPhone.
sumber
Menggunakan
GL_TRIANGLE_FAN
untuk quad menggunakan 4 simpul, bukan 6.sumber
GL_TRIANGLE_STRIP
, seperti yang sudah ditunjukkan oleh jawaban lain.