如何确定在OpenGL中何时在屏幕上绘制对象?

时间:2010-03-09 07:43:44

标签: opengl 3d picking text-rendering

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

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

欢迎任何建议。

4 个答案:

答案 0 :(得分:2)

您可以使用查询对象(特别是那些使用GL_ARB_occlusion_query扩展名Specification创建的对象)。这些对象用于查询使用一系列OpenGL操作(开始/结束等)呈现的片段数量。

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

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

查询对象易于使用,并且它们很轻量级。对于大多数硬件而言,拣货是另一个很好的解决方案,但是比查询对象更具原理性。

答案 1 :(得分:0)

嗯,它实际上是3D吗?或者它只是2D空间中屏幕上的2D文本?在这种情况下,我会手动跟踪它。你究竟是如何绘制文字的?

一般来说,这样做的方法是使用“视锥检查”,你基本上只需要为相机制作一个音量,然后测试你的3D物体是否在里面。

答案 2 :(得分:0)

您可以尝试使用OpenGL的反馈机制。在此模式下,OpenGL生成片段并将其传递给反馈缓冲区。如果剪切了某些内容,则不会生成任何片段。当文本变为可见时,您将在片段缓冲区中找到相应的片段。

link应该可以帮助您入门。

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

答案 3 :(得分:0)

通过projection and modelview matrices运行对象坐标以获取屏幕空间坐标。将X / Y输出与屏幕范围进行比较,以确定文本是否在屏幕上。