我对 OpenGL 非常陌生。我正在编写一个在屏幕上显示飞行 3D 文本的程序。我需要知道某些文本字符串何时出现(绘制)到屏幕上并且对用户可见。程序需要识别显示哪些文本字符串。(注意:虽然我的问题涉及文本,但它可以推广到任何 OpenGL 对象)。
起初,我开始认为我可以使用 OpenGL 的选择机制,但到目前为止,我只看到了选择区域专注于某种用户交互的示例。我想知道整个窗口区域上显示了哪些对象。这让我觉得我走错了路……我错过了什么吗?
欢迎任何建议。
我对 OpenGL 非常陌生。我正在编写一个在屏幕上显示飞行 3D 文本的程序。我需要知道某些文本字符串何时出现(绘制)到屏幕上并且对用户可见。程序需要识别显示哪些文本字符串。(注意:虽然我的问题涉及文本,但它可以推广到任何 OpenGL 对象)。
起初,我开始认为我可以使用 OpenGL 的选择机制,但到目前为止,我只看到了选择区域专注于某种用户交互的示例。我想知道整个窗口区域上显示了哪些对象。这让我觉得我走错了路……我错过了什么吗?
欢迎任何建议。
您可以使用查询对象(特别是那些使用 GL_ARB_occlusion_query 扩展规范创建的对象)。这些对象用于查询使用一系列 OpenGL 操作(开始/结束等)渲染了多少片段。
另一种方案(仅限软件)是确定渲染文本的边界框,然后以数学方式计算边界框是否在视锥体内(源自用于渲染的当前透视图。
注意:使用OpenGL 拾取并不一定意味着使用 gluPickMatrix。您可以“按原样”渲染场景,并查询渲染的名称(OpenGL 3 不推荐使用 altought 拾取)。
查询对象易于使用,而且它们是轻量级的。对于大多数硬件来说,拾取是另一个很好的解决方案,但比查询对象更简略。
嗯,它真的是3D的吗?还是只是二维空间中屏幕上的二维文本?在那种情况下,我只会手动跟踪它。你到底是怎么画你的文字的?
通常,您执行此操作的方式是使用“平截头体检查”,您基本上只是为相机制作一个体积并测试您是否在其中是否有 3d 对象。
通过投影和模型视图矩阵运行对象坐标以获得屏幕空间坐标。将 X/Y 输出与屏幕范围进行比较,以确定文本是否在屏幕上。