1

我对 OpenGL 非常陌生。我正在编写一个在屏幕上显示飞行 3D 文本的程序。我需要知道某些文本字符串何时出现(绘制)到屏幕上并且对用户可见。程序需要识别显示哪些文本字符串。(注意:虽然我的问题涉及文本,但它可以推广到任何 OpenGL 对象)。

起初,我开始认为我可以使用 OpenGL 的选择机制,但到目前为止,我只看到了选择区域专注于某种用户交互的示例。我想知道整个窗口区域上显示了哪些对象。这让我觉得我走错了路……我错过了什么吗?

欢迎任何建议。

4

4 回答 4

2

您可以使用查询对象(特别是那些使用 GL_ARB_occlusion_query 扩展规范创建的对象)。这些对象用于查询使用一系列 OpenGL 操作(开始/结束等)渲染了多少片段。

另一种方案(仅限软件)是确定渲染文本的边界框,然后以数学方式计算边界框是否在视锥体内(源自用于渲染的当前透视图。

注意:使用OpenGL 拾取并不一定意味着使用 gluPickMatrix。您可以“按原样”渲染场景,并查询渲染的名称(OpenGL 3 不推荐使用 altought 拾取)。

查询对象易于使用,而且它们是轻量级的。对于大多数硬件来说,拾取是另一个很好的解决方案,但比查询对象更简略。

于 2010-03-09T18:08:56.337 回答
0

嗯,它真的是3D的吗?还是只是二维空间中屏幕上的二维文本?在那种情况下,我只会手动跟踪它。你到底是怎么画你的文字的?

通常,您执行此操作的方式是使用“平截头体检查”,您基本上只是为相机制作一个体积并测试您是否在其中是否有 3d 对象。

于 2010-03-09T07:48:08.113 回答
0

你可以试试OpenGL的反馈机制。在这种模式下,OpenGL 生成片段并将它们传递到反馈缓冲区。如果剪裁了某些东西,则不会生成任何片段。当文本变得可见时,您将在片段缓冲区中找到相应的片段。

这个链接应该让你开始。

这是另一个链接,问题 10.010似乎与您想要的特别相关。

于 2010-03-09T07:51:07.627 回答
0

通过投影和模型视图矩阵运行对象坐标以获得屏幕空间坐标。将 X/Y 输出与屏幕范围进行比较,以确定文本是否在屏幕上。

于 2010-03-09T16:47:52.830 回答