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

C# 获取存储在显示列表中的顶点数组,c#,opengl,displaylist,tao-framework,C#,Opengl,Displaylist,Tao Framework,是否有可能获得存储在opengl显示列表中的顶点数组? 从其他代码中,我得到了一个应该绘制的显示列表,但我需要知道该模型的边界框。是否有可能从显示列表中提取该信息?否。总账不支持检查显示列表。DLs仅适用于总账,不适用于用户 尽管如此,在理论上仍然有可能获得DL的内容。您可以拦截生成DL的代码正在调用的所有GL调用,跟踪dlist状态并基于顶点数据计算边界框。原则上,老人会允许你这样做。但是,这方面的工作量会非常大,我怀疑这是否是解决您问题的可行方案。您是否考虑过使用,因为这是不推荐使用的Ope

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

否。总账不支持检查显示列表。DLs仅适用于总账,不适用于用户


尽管如此,在理论上仍然有可能获得DL的内容。您可以拦截生成DL的代码正在调用的所有GL调用,跟踪dlist状态并基于顶点数据计算边界框。原则上,老人会允许你这样做。但是,这方面的工作量会非常大,我怀疑这是否是解决您问题的可行方案。

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

在绘制显示列表之前,可以将渲染模式设置为
GL\u FEEDBACK
,然后获得包含所有顶点的缓冲区。因为这是一个很少使用的特性,而且是一个不推荐使用的特性(转换反馈是现代的等价物,尽管它在不同的管道阶段工作),所以一些语言绑定可能没有它

不幸的是,反馈缓冲区包含的不仅仅是顶点。它包含发生的所有光栅操作的列表,您必须构建一些软件来理解此列表。OpenGL SuperBible已经介绍了如何在C中实现这一点

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