OpenGL 将 VBO 保存到文件(Obj 或其他)

Posted

技术标签:

【中文标题】OpenGL 将 VBO 保存到文件(Obj 或其他)【英文标题】:OpenGL Save VBO To File(Obj or something else) 【发布时间】:2011-04-23 00:12:00 【问题描述】:

有没有人设法在运行时将 OpenGL VBO 导出为外部文件格式?我将不胜感激任何正确方向的指示,因为我不知道该怎么做。

【问题讨论】:

一个VBO只是一个字节数组,你不能在不知道里面有什么的情况下通用地导出它,所以问题只是导出一个网格。 好吧,我拥有 OpenGL 渲染这些项目所需的所有资源,我需要将其导出到文件中。有什么想法吗? 【参考方案1】:

OpenGL 只是一个复杂的绘图 API。缓冲区对象中的数据是任意的。是你的程序赋予它意义(以及 OpenGL,顺便说一句)。有人必须将该数据上传到 VBO(glBufferData 调用),并通过向glDrawElementsglDrawArrays 发出正确调用来理解它。所以无论数据首先来自哪里,你最好从那里写一个文件,避免绕道 OpenGL。但是,如果您的程序中没有副本,那么您可以使用glGetBufferSubData 来获取缓冲区中数据的副本。

您的程序中没有数据副本的原因可能是您使用glMapBuffer 将缓冲区内存映射到您的程序中。您还可以使用这样的映射(最好具有只读访问权限)来检索缓冲区中的数据。

结合您必须提供的一些逻辑来理解它,您可以编写任何您喜欢的文件格式。但是编写文件的负担在你身上。

【讨论】:

【参考方案2】:

如果您只想导出顶点和三角形数据,请查看以下格式:

VRML PLY STL

这些是 ascii 格式,易于理解且易于编写。

显然,如 cmets 中所述,您必须了解数据在 VBO 中的编码方式,因为它只是一个字节数组。然后的想法是获取 VBO 的内容,使用特定的应用程序逻辑将其解码为顶点和三角形,并以其中一种文件格式导出此数据。

【讨论】:

别忘了Wavefront OBJ(至少非常容易写)。【参考方案3】:

http://assimp.sourceforge.net/ 是一种方法。

【讨论】:

Assimp 只能导入...不能导出

以上是关于OpenGL 将 VBO 保存到文件(Obj 或其他)的主要内容,如果未能解决你的问题,请参考以下文章

管理 OpenGL VBO 和颜色

如何将元素映射到 OpenGL VBO 中的颜色?

opengl交错vbo不渲染到屏幕

OpenGL - 矩阵逻辑错误

使用 VAO/VBO 进行 OpenGL 模型/纹理渲染

使用多个 openGL VBO 绘制多个模型