安卓OpenGL ES 2.0文本渲染

6
在OpenGL ES 2.0中显示文本似乎缺乏网络支持。JVitela在Draw text in OpenGL ES的答案中建议使用Canvas,并在其上绘制文本以生成位图,然后使用GLUtils渲染文本位图,但该答案仅展示了有关绘制文本的部分,而没有展示其他内容。
我也一直在尝试借鉴http://www.learnopengles.com上的教程,这里是第四课,涉及基本纹理。
JVitela的方法如何传递到顶点或片段着色器?背景部分是否必要?将背景留空是否会导致文本覆盖在其余的GL表面上?他使用的textures变量到底是什么?我认为它是一个纹理数据句柄(与learnopengles的bind()进行比较),但为什么是数组?它是否与其他纹理共享?
我已经在OpenGL ES 2.0中显示了很多东西,现在需要在其上打印一些基本的文本(一些静态的,一些每秒更新1到5次)。我的理解是映射位图字形的纹理映射相当昂贵。
有没有好的教程可以满足我的需求?有没有人有什么建议?
1个回答

2
JVitela的方法如何传递到顶点或片段着色器中?
像其他纹理一样传递:
1. 创建一个纹理 2. 设置过滤和包装 3. 通过GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);上传数据
关于背景的部分是否必要?不使用它会导致在GL表面上只有文本吗?
这不是必需的(将只有一个背景),如果省略它,将写入黑色像素(因为代码用黑色擦除了位图像素)。如果想绘制文本,需要启用混合或使用知道文本颜色的特殊着色器。
他使用的textures变量到底是什么?
它是一个int[1],请参见GL10的API文档
我认为它是一个纹理数据句柄(将其与learnopengles的bind()进行比较),但为什么是一个数组?它是否与其他纹理共享?
这样可以使用glGenTextures创建多个纹理句柄。

省略它会写黑色像素,这是什么意思?会覆盖屏幕上的一切吗?还是会在文本周围放置一个黑色框?我不确定你在这里的意思。 - eskimo9
“屏幕上的其余部分” - 纹理应用于四边形,因此会覆盖四边形后面的所有内容(前提是深度测试成功并且没有混合)。没有“文本周围”的概念 - 有一个画布来绘制。 - Stefan Hanke
好的,我可以让它在背景图像上绘制文本,但它会将纹理渲染到所有可见对象上。我一定是在错误的位置设置了纹理。你知道有没有适用于初学者的教程,可以将不同的纹理应用于不同的表面? - eskimo9
不适用于此特定问题。你需要有一个“实体”类或类似的东西,可以以某种方式分配纹理(一个“纹理”对象或直接使用OpenGL句柄)。然后,在绘制一个特定的“实体”实例时,先绑定给定的纹理,然后再绘制。之后,完全禁用纹理,或通过“glBindTexture(<target>, 0)”取消绑定纹理。详情请参见[这里](http://www.arcsynthesis.org/gltut/Texturing/Texturing.html)。 - Stefan Hanke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接