绘图文字(open gl es,android)

时间:2013-04-07 19:42:16

标签: android text opengl-es

我是新手在Android中打开gl我需要在我的GLSurfaceView中绘制一些文本。我发现只有一个解决方案 - 用文本创建位图并将其显示为纹理(例如,像http://giantandroid.blogspot.ru/2011/03/draw-text-in-opengl-es.html)。我试着这样做,但它对我不起作用。这段代码中的纹理数组是什么?有没有更简单的方式来显示文字?

1 个答案:

答案 0 :(得分:1)

openGL本身并不提供任何“更简单”的渲染文本方式 - 它甚至不会“知道”关于字形在位图或轮廓字体集中的表示方式。

使用一些其他库“知道”如何处理不同的字体集以及如何光栅化它们直接让它们绘制成openGL纹理看起来并不复杂,任何其他方法都可能声称要容易得多。

您可能希望在stackoverflow以及链接页面中查看这两个(请参阅:Draw text in OpenGL ES)文章,以了解可用于选择最适合您的方法的其他方法

关于您链接的代码示例中关于纹理数组的第二个问题,数组仅用于满足对glGenTextures()的调用的API要求,因为它期望数组为第二个论点。

实际上,在这一行中只分配了一个纹理id:

gl.glGenTextures(1, textures, 0);

看一下规范(参见:http://docs.oracle.com/javame/config/cldc/opt-pkgs/api/jb/jsr239/javax/microedition/khronos/opengles/GL10.html),结果发现在纹理数组中只有一个纹理id分配存储在索引0处。

为什么然后是一个(伪)数组?

java方法看似复杂的签名

public void glGenTextures(int n, int[] textures, int offset)

是因为java中没有指针,而得到包装的C函数需要一个指针作为它的第二个参数:

void glGenTextures(GLsizei n, GLuint *textures);

在C代码中,可以使用以下命令分配单个纹理:

  GLuint texture_id;
  glGenTextures (1, &texture_id);

不需要返回单个纹理ID的特殊函数,因此只有一个glGenTextures()函数可用。

允许使用指针算法进行分配,如:

  GLuint textures[10];
  glGenTextures (3, textures + 5);

在C中,java包装器允许第三个参数指定从中分配纹理ID的起始索引。

java中相应的方法调用如下所示:

   int[] textures = new int[10];
   glGenTextures (3, textures, 5);

因此,即使只需要一个id,java包装器中还有一个参数和使用数组的要求。