在OpenGL ES 2中绘制文本的正确方法 我使用PhoneVR OpenGL ES 2 SDK在Windows上用C++开发游戏,然后我可以将它移植到Android或iPhone上。p>

在OpenGL ES 2中绘制文本的正确方法 我使用PhoneVR OpenGL ES 2 SDK在Windows上用C++开发游戏,然后我可以将它移植到Android或iPhone上。p>,android,iphone,c++,opengl-es-2.0,bitmap-fonts,Android,Iphone,C++,Opengl Es 2.0,Bitmap Fonts,一切看起来都很好,但我现在被文本渲染卡住了。在C++中,我没有找到任何关于在OpenGL ES 2中渲染文本(使用TTF或位图字体)的详细教程。 我发现很多话题都在谈论使用java或objective-c(带有textview、surfaceview或一些诸如此类的东西)在android或iphone上呈现文本,但我认为这不是我需要的。我需要一个“跨平台解决方案”。(或者我可能在这一点上错了?) 经过一番研究,我想到了解决办法: 加载并绑定位图字体纹理->解析文本并生成和绑定顶点数组,使用uv数

一切看起来都很好,但我现在被文本渲染卡住了。在C++中,我没有找到任何关于在OpenGL ES 2中渲染文本(使用TTF或位图字体)的详细教程。 我发现很多话题都在谈论使用java或objective-c(带有textview、surfaceview或一些诸如此类的东西)在android或iphone上呈现文本,但我认为这不是我需要的。我需要一个“跨平台解决方案”。(或者我可能在这一点上错了?)

经过一番研究,我想到了解决办法:

加载并绑定位图字体纹理->解析文本并生成和绑定顶点数组,使用uv数组映射纹理,->将其渲染到屏幕

我还没有测试,但我认为使用我的解决方案时会出现问题:当我想更改文本(例如:我正在制作用户分数或屏幕上的计时器)时,我必须重新绑定顶点数组和uv数组,这不是一个好主意,对吗


使用OpenGL ES 2在屏幕上绘制位图字体是否有更好的方法/正确的方法?

文本渲染是3D库世界中大多数新手迟早需要面对的主题之一

互联网上有很多关于文本渲染的教程,很多书都在谈论它。我的建议是环顾四周,努力了解它们是如何工作的

TTF字体不是一个可行的解决方案,因为在实时计算场景(如电脑游戏)中,基于几何体的TTF技术消耗的资源太多

一个非常常见的解决方案(例如,我在PATRIA 3D引擎中使用的解决方案)是使用包含不同字符的字形的纹理图集,然后应用程序逻辑需要处理将构成最终“屏幕文本”的四边形纹理的文本-->字形位置关系

文本呈现不是一个简单的主题,因为它涉及诸如字距/间距/不同文本大小等主题

试着通过这个链接来更好地理解这个主题(如果我没有错的话,这个wiki的作者就是这个社区的活跃成员)


您提到的解决方案是可行的,事实上,如果您修改文本,您必须重新创建表示文本的几何体,并将其重新提交给OpenGL

这一娱乐步骤需要一些时间,但肯定不会太多

对于渲染文本,问题有两个主要部分:

  • 创建纹理贴图集位图
  • 使用此纹理绘制文本,考虑字体度量(大小、字距等)以及可能的亚像素抗锯齿
要创建纹理图集,可以找到一些代码(可能使用freetype)或使用现有工具(例如)

对于绘图,您可能希望基于一些现有代码推出自己的代码,因为对于好看的文本,有很多细节需要处理。要开始头痛,你可以看一眼


一个很好的现代灵感来源可能是代码。

在游戏中绘制文本的正确方法是使用纹理地图集和包含距离字段的图示符:

另请参阅Valve(半衰期和门户网站的创建者)的这篇Siggraph论文,其中描述了该技术的各种变化:


基于距离字段的文本质量远高于基于普通位图的文本。它还使用更少的内存,因为距离字段小于字体的逐字位图表示。

有人有支持旋转的OpenGL ES 2.0 Android示例吗?