iOS - 使用OpenGL ES 2.0显示文本

时间:2017-08-07 11:05:05

标签: ios opengl-es opengl-es-2.0

我很惊讶地用OpenGL ES 2.0显示文本。 stackoverflow上有大量的帖子,辩论主题,显示几行代码,或显示2010年的链接,但使用OpenGL ES 1.x(不兼容)。

但是它们很模糊,据我所知,没有完整的代码或方便的方式来显示版本2的文本。

您知道是否有现代的方式来显示文字?就像添加一个pod并写这样的东西一样?

[font drawText:@"This is a text" size:@12];

非常感谢,任何帮助都会非常受欢迎。

编辑1:由于内部原因,我必须使用OpenGL 2.0,而且我不能使用其他东西。

编辑2:我发现有两个库可以做到:

这个很简单但是为ES1编写,所以我需要将代码移植到ES2。

编辑3:ES1和ES2不同:ES2适用于着色器。

2 个答案:

答案 0 :(得分:0)

由于您的目标是ES2并且支持着色器,因此创建一个可以为您执行此操作的工具可能会有点困难。但是如果你找到这样一个工具,它可能会在许多方面与你的流程冲突,例如绑定自己的着色器和缓冲区,使用混合设置,深度缓冲...然后如果它会这样做你就会遇到麻烦,因为你可能没有可以很好地控制文本的绘制方式和位置(例如在3D旋转框上)。

但是从你的问题(它的片段)看起来更像你要做的就是添加一些带有文本的2D叠加层,看起来就像使用UILabel一样。如果是这种情况,那么我建议您实际使用UILabel来绘制这些文本。您可以在显示openGL内容的视图上轻松添加所有这些视图。

在另一种情况下,您仍然需要在3D对象上绘制文本并且想要非常轻松地执行此操作我建议您仍然使用UILabel但是创建其截图并将其推送到新的(或地图集)质地。然后你可以像任何其他对象一样绘制它。然后UILabel将处理所有字体,对齐方式,颜色,多行和文本换行,字体大小调整...所以如果你已经有一个系统在场景中绘制一个纹理,你不应该太远自创建自己因为您使用纹理来传输数据,所以在屏幕上绘制一些文本的工具。

答案 1 :(得分:0)

自OpenGL ES1以来没有任何变化。通常,文本以平面投影显示,并创建使用字体纹理纹理化的四边形。关于这个主题有很多教程。 One example how to do it. 但是,当您从头开始时,这是相当多的工作。

可能有更好的方法,但取决于你打算做什么可能不合适。您可以将UIKit与OpenGL视图混合,将UIKit绘制的文本作为叠加层绘制。 (UILabel,UIButton..etc。)