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
调用),并通过向glDrawElements
或glDrawArrays
发出正确调用来理解它。所以无论数据首先来自哪里,你最好从那里写一个文件,避免绕道 OpenGL。但是,如果您的程序中没有副本,那么您可以使用glGetBufferSubData
来获取缓冲区中数据的副本。
您的程序中没有数据副本的原因可能是您使用glMapBuffer
将缓冲区内存映射到您的程序中。您还可以使用这样的映射(最好具有只读访问权限)来检索缓冲区中的数据。
结合您必须提供的一些逻辑来理解它,您可以编写任何您喜欢的文件格式。但是编写文件的负担在你身上。
【讨论】:
【参考方案2】:如果您只想导出顶点和三角形数据,请查看以下格式:
VRML PLY STL这些是 ascii 格式,易于理解且易于编写。
显然,如 cmets 中所述,您必须了解数据在 VBO 中的编码方式,因为它只是一个字节数组。然后的想法是获取 VBO 的内容,使用特定的应用程序逻辑将其解码为顶点和三角形,并以其中一种文件格式导出此数据。
【讨论】:
别忘了Wavefront OBJ(至少非常容易写)。【参考方案3】:http://assimp.sourceforge.net/ 是一种方法。
【讨论】:
Assimp 只能导入...不能导出以上是关于OpenGL 将 VBO 保存到文件(Obj 或其他)的主要内容,如果未能解决你的问题,请参考以下文章