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



我从来没有做过OpenGL,但我正在寻找一些关于我正在练习的AR应用程序上这个特定问题的指针。

我想做一个应用程序与"平面矩形"以及文字写在矩形的表面上。从视觉上看,我想象着一张写着文字的纸。每次应用程序启动时,文本将是不同的内容(文本是从plist文件中提取的)。

用户将能够从各个角度查看纸张,就好像有一张纸挂在他面前一样。

在OpenGL中这是微不足道的吗?我该如何开始呢?

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

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

这个问题很难明确地回答。一般来说,这是微不足道的,但又不是。

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

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

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

现在,如果你的"一张纸"也应该弯曲和扭曲,或者做一个页面剥离效果,而不仅仅是一个平坦的矩形,这就变得更复杂了。在这种情况下,您需要对其进行镶嵌,这也比听起来要困难得多。并不是所有的镶嵌看起来最适合所有的弯曲/扭转,或者他们有,但没有最优(读为最小)顶点数。

在一本GPU Gems或GPU Pro的书中有一篇关于"页面剥离"和这样的镶嵌的文章,让我搜索一下…

There: Andreas Bizzotto:"基于shader的电子书阅读器-页面剥离效果",GPU Pro2 pp. 278-299

也许你能弄到一本,或者幸运地在谷歌图书或其他地方找到它。

最新更新