首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OpenGL ES中绘制文本

在OpenGL ES中绘制文本
EN

Stack Overflow用户
提问于 2009-08-27 06:10:47
回答 13查看 114.6K关注 0票数 134

我目前正在为安卓平台开发一个小的OpenGL游戏,我想知道是否有一种简单的方法可以在渲染的框架上渲染文本(比如带有玩家分数的HUD等)。文本还需要使用自定义字体。

我看过一个使用View作为覆盖的例子,但我不知道我是否想这样做,因为我可能想稍后将游戏移植到其他平台。

有什么想法吗?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2009-08-27 18:35:54

Android SDK没有提供任何在OpenGL视图上绘制文本的简单方法。给你留下了以下选项。

  1. Place a TextView over your SurfaceView。这很慢也很糟糕,但最直接的方法就是将常见的字符串直接指向纹理,然后简单地绘制这些纹理。这是迄今为止最简单最快的基于精灵的文本渲染代码。如果2不是一个选项,可能是第二好的选择。一个不错的入门方法,但请注意,虽然它看起来很简单(基本功能也很简单),但当你添加更多功能(纹理对齐,处理换行符,可变宽度字体等)时,它会变得更加困难和具有挑战性。-如果你采用这种方法,让它尽可能简单,with!
  2. Use一个现成的/开源库。如果你在谷歌上搜索,棘手的一点是让它们集成并运行。但至少,一旦你这样做了,你将拥有它们提供的所有灵活性和成熟度。
票数 107
EN

Stack Overflow用户

发布于 2010-12-02 23:35:45

将文本渲染到纹理要比精灵文本演示使其看起来更简单,其基本思想是使用Canvas类渲染到位图,然后将位图传递给OpenGL纹理:

代码语言:javascript
复制
// Create an empty, mutable bitmap
Bitmap bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.ARGB_4444);
// get a canvas to paint over the bitmap
Canvas canvas = new Canvas(bitmap);
bitmap.eraseColor(0);

// get a background image from resources
// note the image format must match the bitmap format
Drawable background = context.getResources().getDrawable(R.drawable.background);
background.setBounds(0, 0, 256, 256);
background.draw(canvas); // draw the background to our bitmap

// Draw the text
Paint textPaint = new Paint();
textPaint.setTextSize(32);
textPaint.setAntiAlias(true);
textPaint.setARGB(0xff, 0x00, 0x00, 0x00);
// draw the text centered
canvas.drawText("Hello World", 16,112, textPaint);

//Generate one texture pointer...
gl.glGenTextures(1, textures, 0);
//...and bind it to our array
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);

//Create Nearest Filtered Texture
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

//Different possible texture parameters, e.g. GL10.GL_CLAMP_TO_EDGE
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);

//Use the Android GLUtils to specify a two-dimensional texture image from our bitmap
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

//Clean up
bitmap.recycle();
票数 168
EN

Stack Overflow用户

发布于 2012-05-25 16:40:36

我写了一个tutorial,它在JVitela发布的答案上进行了扩展。基本上,它使用相同的思想,但不是将每个字符串渲染到纹理,而是将字体文件中的所有字符渲染到纹理中,并使用该纹理来实现完全动态的文本渲染,而不会进一步减慢速度(一旦初始化完成)。

与各种字体图集生成器相比,我的方法的主要优点是您可以随项目一起提供小字体文件(.ttf .otf),而不必为每种字体变化和大小提供大的位图。它可以在任何分辨率下生成完美质量的字体,只需使用一个字体文件:)

tutorial包含可在任何项目中使用的完整代码:)

票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1339136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档