【问题标题】:How to draw many small Bitmaps in opengl如何在opengl中绘制许多小位图
【发布时间】:2013-07-29 18:46:01
【问题描述】:

我是 opengl 的新手,我想快速绘制许多位图。我给自己写了几个类来绘制位图。如果我使用这些类来绘制一些大位图它很快,但如果我用它来绘制许多小位图它很慢。这是我的代码:

画家类:

 public void draw(int id, FloatBuffer vertexBuffer) {
     // bind the previously generated texture
     gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[id]);

     // Point to our buffers
     gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
     gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

     gl.glEnable(GL10.GL_BLEND);
     gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

     gl.glColor4f(1,1,1,1);

     // Set the face rotation
     gl.glFrontFace(GL10.GL_CW);

     // Point to our vertex buffer
     gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
     gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

     // Draw the vertices as triangle strip      
     gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

     //Disable the client state before leaving
     gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
     gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
 }

那我这样称呼它:

 painter.draw(bmp, vert);

"bmp" 是 int 值,vert 是 Fl​​oatBuffer。 位图在每一帧中都会改变位置,所以我为每个位图计算每帧中的 FloatBuffer。

你认为有更快的方法来绘制它吗?

【问题讨论】:

    标签: java android performance opengl-es bitmap


    【解决方案1】:

    我的建议是将需要渲染的所有位图的顶点放在一个大顶点数组中的帧中,然后一次性渲染。但是,为避免手动切换纹理,您必须使用所有位图创建纹理图集,或者使用 array textures,如果您可以使用(您需要 OpenGL 3 或 EXT_texture_array)。

    【讨论】:

    • 感谢您的快速回答,我将尝试制作一个大顶点数组并一次性渲染它。我使用 OpenGL ES 2.0
    • 我认为在这种情况下您将不得不使用纹理图集。这可能会让你感兴趣:stackoverflow.com/questions/8230009/…
    • 再次感谢,我去看看,需要一段时间才能测试它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 2013-02-04
    相关资源
    最近更新 更多