【问题标题】:iOS - Displaying text with OpenGL ES 2.0iOS - 使用 OpenGL ES 2.0 显示文本
【发布时间】:2018-01-14 16:05:58
【问题描述】:

在使用 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 与着色器一起使用。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。实际上我需要将它显示到 openGL ES 2.0,因为我有一个 openGL 场景(包含矩形、纹理等),并且我将此场景编码为视频。
    • 那么,如果这是 2D 的,那就更容易了。您可以创建另一个与您的 openGL 相同大小的视图。根据需要为其添加标签,然后创建一个屏幕截图和该视图,并在绘图管道的末尾绘制纹理...
    • 谢谢,但我认为这不是最佳选择。用户可以非常快速地更改文本,我不想每次更改都生成大图像。我更喜欢纹理图集之类的东西,但我找不到任何用 opengl es 2.0 完成的代码
    【解决方案2】:

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

    可能有更好的方法,但根据您的计划,可能不合适。您可以将 UIKit 与 OpenGL 视图混合使用,将使用 UIKit 绘制的文本作为覆盖。 (UILabel、UIButton..等)

    【讨论】:

    • 感谢您的回答! ES1 和 ES2 之间存在一些差异,我将帖子编辑得更具体。正如你所说,这是一项相当多的工作,而这正是我想要避免的:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多