lac*_*cas 21 android opengl-es
什么是最好的方法?如果我使用drawarrays,或者我使用drawelements?有什么不同的?
rya*_*anm 32
对于两者,您将OpenGL传递一些包含顶点数据的缓冲区.
glDrawArrays基本上是"使用我之前给你的数据绘制这个连续的顶点范围".好:
坏:
使用glDrawElements,您可以传入包含要绘制的顶点索引的缓冲区.
好
坏
我的建议是使用glDrawElements
性能影响在iPhone上可能类似,iOS的OpenGL ES编程指南建议使用三角形条带并通过简并三角形连接多个条带.
该链接有一个很好的插图概念.通过这种方式,您可以重复使用一些顶点并仍然可以一步完成所有绘图.
为了获得最佳性能,您的模型应使用glDrawArrays作为单个无索引三角形条提交,并尽可能少复制顶点.如果您的模型需要复制许多顶点(因为许多顶点由三角形共享的三角形共享,或者因为您的应用程序合并了许多较小的三角形条),您可以使用单独的索引缓冲区并调用glDrawElements获得更好的性能代替.有一个权衡:未编制索引的三角形条必须定期复制整个顶点,而索引三角形列表需要额外的索引内存,并增加查找顶点的开销.为获得最佳效果,请使用索引和未编制索引的三角形条测试模型,并使用速度最快的三角形条.
在可能的情况下,对顶点和索引数据进行排序,以便共享公共顶点的三角形在三角形条带中相互接近地绘制.图形硬件通常会缓存最近的顶点计算,因此引用的局部性可能允许硬件避免多次计算顶点.
缺点是您可能需要一个预处理步骤来对网格进行排序,以获得足够长的条带.我还没有想出一个很好的算法,所以与GL_TRIANGLES相比,我不能给出任何性能或空格数.当然,这也高度依赖于您想要绘制的网格.
| 归档时间: |
|
| 查看次数: |
18593 次 |
| 最近记录: |