OpenGL保存渲染以供以后使用

时间:2010-10-09 06:52:05

标签: vb.net opengl 3d 3d-modelling opentk

这是一个非常初学的问题,但考虑到我在OpenGL中渲染一个需要大量计算的复杂形状,无论如何都要将它导出到一个模型状态,以后可以再次打开它,因为你不会编辑它再次?

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

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

2 个答案:

答案 0 :(得分:3)

显而易见的可能性是将顶点写入文件,然后在需要时重新加载它们。除非您有其他具体原因,否则最好使用众多现有文件格式之一,例如Wavefront OBJ,Ogre3d mesh XML文件,etc

答案 1 :(得分: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 3.0及更高版本(以及glTranslate,glVertex glBegin ... grrr)中不推荐使用OpenGL显示列表(不会删除!),但它们在可预见的未来仍然有效。为了将来证明,你应该使用顶点数组,但这有点复杂。