0

这是一个非常初学者的问题,但鉴于我在 OpenGL 中渲染了一个复杂的形状,需要进行大量计算,是否有办法将其导出到模型之类的状态,以后可以再次打开它,因为您不会再次编辑它?

我无法在程序之外创建它们(使用 Blender 之类的东西),因为形状是在程序启动时计算的。然后渲染被平移、旋转、绘制等等。注意,虽然我不需要编辑形状,但我确实希望它处于 3D 状态,所以保存图像不是一种选择。

我正在使用 OpenTK 1.0、VB.NET (.NET 4)

4

2 回答 2

3

显而易见的可能性是将顶点写入文件,然后在需要时重新加载它们。除非您有特殊原因,否则最好使用许多现有文件格式中的一种,例如Wavefront OBJ、Ogre3d网格 XML文件

于 2010-10-09T15:37:00.003 回答
1

这听起来像是 OpenGL 显示列表的理想情况。您使用它们的方式是首先向 OpenGL 询问要使用的显示列表 ID:

GLuint draw_id = glGenLists(1);

(您可以一次要求几个连续的 id,但在这种情况下,我们只要求 1 个)然后,第一次通过您的绘图例程,调用 glNewList:

glNewList(draw_id, GL_COMPILE);
<do compute intensive drawing here>
glEndList();

请注意,这实际上不会渲染您的形状(您可以在 glNewList 中使用 GL_COMPILE_AND_EXECUTE,这渲染您的形状,但通常不鼓励这样做)

现在,每当您需要绘制对象时:

< set up your OpenGL matrices >
glCallList(draw_id);

最后,当你完成它时,你可以使用 glDeleteLists。

显示列表实际上可以加快渲染速度,因为可以进行一些优化,并消除所有函数调用开销。

现在,从技术上讲,OpenGL 显示列表在 OpenGL 3.0 及更高版本(以及 glTranslate、glVertex glBegin... grrr)中已被弃用(但未删除!),但在可预见的未来它们应该仍然有效。为了将来证明,您应该使用顶点数组,但这有点复杂。

于 2010-10-09T21:33:05.443 回答