2010-11-02 236 views
2

我正在创建一个需要绘制多个线段的应用程序,每个线段以一种颜色开始并以另一种颜色结尾。 目前我在我的计算循环内有下面的代码,但这看起来像是矫枉过正以达到我想要的效果,特别是如果该线可能有数百段长。如何在Android上的OpenGL-ES中绘制多个不同颜色的线段

我是OpenGL的新手,所以希望了解如何最好地解决这个问题。

谢谢。

vertexBuffer.position(0); 
    vertexBuffer.put(xyz[0]); 
    vertexBuffer.put(xyz[1]); 
    vertexBuffer.put(xyz[2]/); 
    vertexBuffer.put(nextxyz[0]); 
    vertexBuffer.put(nextxyz[1]/; 
    vertexBuffer.put(nextxyz[2]); 
    vertexBuffer.position(0); 

    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); 
    gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer); 
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
    gl.glEnableClientState(GL10.GL_COLOR_ARRAY); 
    gl.glDrawArrays(GL10.GL_LINES, 0, 2); 
    gl.glDisableClientState(GL10.GL_COLOR_ARRAY); 
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 

回答

0

我完全不明白什么是你的问题,但我认为,绘制数百段是不是最好的解决办法...

那你想干什么?

  • 这些细分是否都在一条线上对齐?
  • 你可以通过在四边形中绘制的单个纹理来替换所有这些线条吗?
  • 你能计算像点的坐标这样的特定数据中每个像素的颜色吗?在这种情况下,您可以使用片段着色器为每个像素着色。
1

这是对顶点数组的错误使用。他们可以在一次绘制调用中绘制多个图元(您的案例中的线条),并且每次调用只绘制一行。

刚收拾所有生产线的顶点(当然还有颜色)合并为一个顶点数组(和颜色阵列),使顶点2*i和顶点2*i+1弥补线i,然后用绘制所有线条一气呵成

glDrawArrays(GL_LINES, 0, 2*numLines); 

如果线段全部连接,还可以使用线条条,线条的结束顶点用作下一条线的起始顶点(但请记住,在这种情况下,线当然也具有与下一个起始顶点相同的颜色)。这样,你只需要numLines+1顶点,并且可以与

glDrawArray(GL_LINE_STRIP, 0, numLines+1); 

编辑绘制linestrip:而像PROFET说,当所有的线段构成了一个单一的连接直线,你可以只使用一个单行一维纹理或片段着色器(尽管对于初学者来说可能有点沉重),以便沿着线条改变颜色。

编辑:您的代码建议您希望所有线段使用相同的开始和结束颜色。在这种情况下,你当然不能使用线条。将所有顶点打包到一个数组中以便通过一次调用(第一个建议)绘制所有分段将意味着为每条线重复颜色,但它可能仍会比调用多个glDrawArrays更快,尤其是如果您构建顶点和颜色数组只有一次。在这种情况下,使用无符号字节颜色而不是浮点(很少需要颜色)也可能有助于提高性能,因为每个顶点只有16个字节发送给GPU(这也非常适合对齐)。

相关问题