获取存储在显示列表中的顶点数组

时间:2013-12-22 17:45:28

标签: c# opengl displaylist tao-framework

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您是否考虑过使用feedback buffer,因为这是不推荐使用的OpenGL?

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

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

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