-1

是否有可能获取存储在opengl的显示列表中的顶点数组?从其他一些代码中,我得到了一个应该绘制的显示列表,但我需要知道该模型的边界框。我是否有可能从显示列表中提取该信息?

4

2 回答 2

0

不可以。GL 不支持检查显示列表。DL 仅适用于 GL,而不适用于用户。

话虽如此,理论上仍有可能获得 DL 的内容。您可以拦截生成 DL 正在调用的代码的所有 GL 调用,跟踪 dlist 状态并根据顶点数据计算边界框。旧的Chromium 开源项目原则上允许您这样做。但是,为此付出的努力会非常高,我怀疑这是否是解决您的问题的可行解决方案。

于 2013-12-22T18:00:08.067 回答
0

您是否考虑过使用反馈缓冲区,因为这是不推荐使用的 OpenGL?

您可以GL_FEEDBACK在绘制显示列表之前将渲染模式设置为,然后获取一个充满所有顶点的缓冲区。由于这是一个很少使用的功能,并且当时已弃用(转换反馈是现代的等价物,尽管它在不同的管道阶段起作用),因此某些语言绑定可能没有它。

不幸的是,反馈缓冲区不仅仅包含顶点。它包含发生的所有栅格操作的列表,您必须构建一些软件才能理解此列表。OpenGL SuperBible 有一个如何在 C 中执行此操作的示例。

要注意的另一件事是顶点位置在屏幕空间中,您需要将它们反向投影到对象空间中,以便按照您在示例中想要的方式工作。这也意味着任何必须剪裁的顶点的原始位置都将丢失。它远非完美的解决方案,如果有的话,更像是一种破解,但它可能很有用。

于 2013-12-22T18:53:43.133 回答