网络上似乎明显缺乏对如何在 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?
它像任何其他纹理一样传递:
- 创建纹理
- 设置过滤和换行
- 通过
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/