2011-02-11 96 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。只要字符串保持不變,就重用數據。