Android OpenGL ES 2.0 文本渲染

标签 android opengl-es-2.0 textures android-canvas

网络上似乎明显缺乏对如何在 OpenGL ES 2.0 中显示文本的支持。 JVitela 的回答:Draw text in OpenGL ES说使用 Canvas,并在其上绘制文本以生成位图,然后使用 GLUtils 渲染文本位图,但答案仅显示直接绘制文本的部分,而不显示围绕它的其他内容。

我也一直在尝试在 http://www.learnopengles.com 上课,在本例中是处理基本纹理的第 4 课。

JVitela 的方法是如何传递给顶点或 fragment 着色器的?关于背景的部分是否必要,或者将背景留在外面只会导致 GL Surface 其余部分的文本?他使用的 textures 变量到底是什么?我认为这是一个纹理数据句柄(将他的 bind() 与 learnopengles 的那个进行比较)但为什么是数组?它是否与其他纹理共享?

我有一个程序,上面已经使用 OpenGL ES 2.0 显示了一堆东西,并且需要在上面打印一些基本文本(一些是静态的,一些每隔 1 到 5 Hz 更新一次)。我的理解是纹理映射位图字形非常昂贵。

是否有任何好的教程可以满足我的需要?有任何人的建议吗?

最佳答案

How is JVitela's method passed to a vertex or fragment shader?

它像任何其他纹理一样传递:

  1. 创建纹理
  2. 设置过滤和换行
  3. 通过GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);上传数据

Is the section about the background necessary, or will leaving the background out result in just the text over the rest of the GL Surface?

不需要(只有背景),不写会写黑色像素(因为代码用黑色删除之前的位图像素。如果你只想画文字,你需要启用混合或使用知道文本颜色的特殊着色器。

What exactly is the textures variable he used?

它是一个int[1],参见API docs on GL10 .

I think it's a texture data handle (comparing his bind() to at that of learnopengles) but why an array? is it shared with other textures?

这样,可以使用 glGenTextures 创建多个纹理句柄。

关于Android OpenGL ES 2.0 文本渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10526260/

相关文章:

android - 运行我的应用程序时如何调用事件 "screen_off"?

android - Cordova 构建失败

android - 在 Android 中嗅探蓝牙低功耗

map - 如何创建OpenGL ES 2.0 SkyBox?

ios - 如何在OpenGL ES 2.0中实现glOrthof

java - OpenGL 将滤镜应用于带有 slick.util 纹理的纹理

android - ExifInterface 返回图像方向 0

java - Android 更改 OpenGL 坐标系

c# - XNA windows phone 发布黑色纹理

c - 光线追踪球形纹理