2013-12-22 39 views
-1

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

回答

0

您是否考虑过使用feedback buffer,因为这已被弃用OpenGL?

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

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

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

0

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

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