2011-02-11 27 views
0

我想在opengl ES中显示一些文字。我有一个512 * 512的字体纹理(纹理图集),这里所有的字母都是32 * 32像素。Android opengl-es快速呈现文字的方式

我的文字长度约为400个字符。

我的算法

opengl.setClearTransparentBGEnabled(); 

    float y2=0; 
    float j =0; 

    for (int i=0; i<text.length(); i++) { 

     int ch =(int)text.charAt(i); 
     float x2=((float)j*16*scale/50); 

     j++; 
     if ((text.charAt(i)+"").equals("\n")) { 
      y2+=(16*scale*2)/50; 
      j=0; 
      x2=0; 
     } 

     opengl.saveMatrix(); 
      Sprites.selectVertex("font"+name) 
        .setSprite(ch) 
        .translate(x-x2, y+y2, -9) 
        .scale(scale, scale, scale) 
        .rotate(90, 0, 0, 1) 
        .draw(true); 
     opengl.loadMatrix(); 
    } 

    opengl.setClearTransparentBGDisabled(); 

我唯一probleme,这种方法是很慢的:在这之后,我得到15-20 FPS。

什么是动态渲染opengl-es文本的最佳方式?

回答

2

这对于每帧的工作来说太多了。

我会使用2D APIs到Canvas.drawText()(或drawBitmap,如果您不使用真正的字体)400个字符到私人Bitmap,并将其用作我的纹理。

+0

我想使用ttf文件,那么在我的opengl es应用程序(我知道2d api的drawtext方法)中使用它的方式是什么? – lacas 2011-02-11 18:12:09

0

您正在重复每一帧和文本中每个字符的大量工作。您应该计算给定字符串的所有顶点和三角形数据,然后在一批中将其提交给opengl。只要字符串保持不变,就重用数据。