3

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

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

用户将能够从各个方面查看纸张,就像他面前挂着一张纸一样。

这在OpenGL中是微不足道的吗?我怎么能开始?

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

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

4

1 回答 1

6

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

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

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

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

现在,如果你的“一张纸”也应该弯曲和扭曲,或者做一个页面剥离效果而不是一个扁平的矩形,它会变得更加复杂。在这种情况下,您需要对其进行镶嵌,这也可能比听起来更难。并非所有镶嵌看起来对于所有弯曲/扭曲都是最佳的,或者它们确实但没有最佳(读取为最小)顶点数。

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

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

也许你可以得到一份副本,或者有幸在 Google 图书之类的东西上找到它。

于 2011-10-27T09:27:02.750 回答