ios - 在 OpenGL 中制作 "piece of paper with text on it"(特别是在 iOS 5 上)

标签 ios opengl-es glkit

我从未用过 OpenGL,但我正在练习的 AR 应用程序上寻找关于这个特定问题的一些提示。

我想制作一个带有“平面矩形”的应用程序以及在矩形表面上书写的文本。在视觉上,我正在想象一张纸上写有文字的线条。每次应用程序启动时,文本都会有所不同(文本是从 plist 文件中提取的)。

用户可以从各个角度查看纸张,就好像有一张纸卡在他面前一样。

这在 OpenGL 中很简单吗?我该如何开始?

很抱歉问了一个开放式的问题,但我想感受一下这种事情是如何完成的。

查看 Xcode 示例项目中的 OpenGL 模板源代码,我看到有大量顶点。我假设要创建一个“平面”矩形,我基本上只需要删除或使 z 轴为零。然后动态文本将附加到平面矩形的表面……我不知道该怎么做……

最佳答案

这个问题很难明确回答。一般来说,这是微不足道的,但事实并非如此。

绘制一个“上面有东西的平面矩形”是几个 API 调用,尽可能简单。在 OpenGL 中以高效、高质量且无需大量预处理的方式绘制文本是完全不同的故事。

我会做的是使用 iOS 下“正常系统支持”的任何方式呈现文本(就像您在任何窗口中绘制一样,我不知道这个具体细节),但是绘制 位图 而不是在屏幕上。这应该得到支持,几乎每个操作系统都支持它至少 10-15 年。然后将此位图转换为纹理,绑定(bind)它,并使用 OpenGL 绘制平凡的平面四边形(设置一个具有 4 个顶点的顶点缓冲区,每个顶点一个纹理坐标,并绘制两个三角形 - 尽可能简单)。

这样做的巨大优势是你可以使用安装的系统字体(或任何可用的字体),你不需要生成位图字体,也不需要考虑一些非常丑陋的事情,比如提示和适当的间距,混合不同的文本样式等要容易得多。当然,OpenGL 也有对文本的内置支持,但它既不是非常高效也不是很好。如果文本不是每毫秒更改一次,那么最好使用操作系统提供的标准渲染器来渲染它(是的,这可能不会是硬件加速的,但是那又怎样......因为用户必须阅读文本,它可能不会每毫秒都改变)。

现在,如果您的“纸片”也应该弯曲和扭曲,或者产生页面剥离效果,而不仅仅是一个平面矩形,事情就会变得更加复杂。在那种情况下,您需要对其进行分割,这也可能比听起来更难。并非所有曲面分割看起来都适合所有弯曲/扭曲,或者它们虽然有但没有最佳(读作最小)顶点数。

GPU Gems 或 GPU Pro 书籍中有一篇关于“页面剥离”和此类镶嵌的文章,让我搜索...

那里:Andreas Bizzotto:“基于着色器的电子书阅读器 - 页面剥离效果”,GPU Pro2 第 278-299 页

也许您可以获得一份副本,或者幸运地在 Google 图书或其他网站上找到它。

关于ios - 在 OpenGL 中制作 "piece of paper with text on it"(特别是在 iOS 5 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7913715/

相关文章:

iOS GLKViewController 嵌套 GLKit View

ios - 围绕对象的OpenGL ES轨道摄像机

ios - 在 Swift iOS 中创建输入管道时应用程序崩溃(信号 13)

ios - 如何使用 iPhone 传感器数据计算 GPS DoP(精度因子)?

ios - 从 UIBarButtonItem 获取目标 ViewController?

Android OpenGL ES 2.0 纹理

iphone - 由于超时终止 xcode 应用程序

java - 渲染 : To draw-once or to re-draw? JOGL + Java2D + Java Swing 会很麻烦吗?

android - 某些 Android 设备上的低 fps

ios - GLKView + CIImage with Alpha + AVFoundation = Trippy Mess