使用openGL和cocos2D绘制大量线条的最好方法是什么?

我有一系列的2d顶点表示用于绘制网格的线条。 有大约900个线段绘制(网格使用弹簧物理来扭曲,这就是为什么我不只是为每行和每列绘制一条线)。 cocos2D内置了一个ccDrawLine函数,可以很好地绘制,但是我认为这可能是低效的,因为它为每个线段调用glDrawArrays。 你如何有效地绘制大量的线段? 作为奖励,请使用openGL推荐良好的2D绘图实践。

在OpenGL中进行高效的绘图意味着发送最less的信息,以及最less量的信息。 与所有事情一样,这取决于情况,你应该尝试各种事情和基准你的情况。 但是,作为一个经验法则 ,最有效的方法(如果顶点是静止的)是将顶点存储在卡上一次(在缓冲区中)并且多次渲染,次好的(有意义的时候)是使用几何着色器来生成卡上的大部分顶点,其次最好是一次发送所有的顶点,最好是发送批次,最后最糟糕的是一次一个。

900实际上并不是很多,听起来像是缓冲区或着色器在这种情况下是没有意义的。

要批量发送,您需要将顶点放置在顺序存储器中,例如:

float coords[] = { 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0 }; 

(这是x1,y1,x2,y2等等。你可能想要malloc一些内存,以便它可以变长)

然后你把它发送给OpenGL并渲染它:

 glVertexPointer( 2, GL_FLOAT, 0, coords ); // 2 = dimensions glDrawArrays( GL_LINES, 0, 4 ); // 4 = number of points, => 2 lines 

GL_LINES会画一条从1到2,3到4等的线,还有很多其他选项。 你可以稍微宽松些, 如果需要的话,看一下stride参数(0以上)。 这里是文档:

http://www.opengl.org/sdk/docs/man2/xhtml/glVertexPointer.xml

http://www.opengl.org/sdk/docs/man2/xhtml/glDrawArrays.xml

Cocos2d 2.0有CCDrawNode ,它批量绘制图元(线,圆,..)。