我从来没有做过OpenGL,但我正在寻找关于我正在练习的AR应用程序上这个特定问题的一些指示。
我想创建一个带有“扁平矩形”的应用程序以及写在矩形表面上的文本。在视觉上,我想象着一张纸上写着文字的东西。每次应用程序启动时,文本都会有所不同(文本是从plist文件中提取的)。
用户可以从各个方向查看纸张,就像在他面前挂着一张纸一样。
在OpenGL中这是微不足道的吗?我怎么能开始?
对于这个真正开放式的问题感到抱歉,但我想知道这种事情是如何完成的。
查看Xcode示例项目中的OpenGL模板源代码,我发现有一个很大的顶点数组。我认为要创建一个“平面”矩形,我只需要删除或使z轴为零。然后动态文本将附加到扁平矩形的表面......我不知道该怎么做......
答案 0 :(得分:6)
这个问题很难毫不含糊地回答。一般来说,这是微不足道的,但事实并非如此。
绘制一个“带有东西的扁平矩形”是一对API调用,尽可能简单。以高效的方式在OpenGL 中绘制文本,并且没有大的预处理是一个完全不同的故事。
我要做的是使用iOS下的“正常系统支持”方式渲染文本(就像在任何窗口中绘制一样,我不知道这个具体细节),但是将绘制成一个位图而不是在屏幕上。这应该得到支持,几乎每个操作系统都支持这个至少10 - 15年。然后将此位图转换为纹理,绑定它,并使用OpenGL绘制平凡的四边形(设置一个顶点缓冲区,其中包含4个顶点,每个顶点都是一个纹理坐标,并绘制两个三角形 - 就像它一样容易)。
它的巨大优势在于你可以使用已安装的系统字体(或任何可用的字体),你不需要生成位图字体,也不需要考虑真正丑陋的东西,如提示和适当的间距,混合不同的文本样式等要容易得多。当然,OpenGL也有内置的文本支持,但它也不是非常有效或不错。如果文本没有每毫秒都改变,那么最好使用操作系统提供的标准渲染器来渲染它(是的,这可能不会是硬件加速,但是那么......因为用户必须阅读文本,它可能不会每毫秒都改变。)
现在如果你的“纸张”也应该弯曲和扭曲,或者做一个页面剥离效果而不仅仅是一个扁平的矩形,它会变得更复杂。在这种情况下,你需要对它进行测试,这可能比听起来更难。并非所有的细分都适用于所有弯曲/扭曲,或者它们没有最佳(读取最小)顶点数。
有一篇关于“页面剥离”的文章,以及其中一个GPU Gems或GPU Pro书籍,让我搜索......
其中: Andreas Bizzotto:“基于着色器的电子书阅读器 - 页面剥离效果”,GPU Pro2第278-299页
也许你可以获得一份副本,或者有幸在Google Books上找到它。