简单的线框格式?

时间:2008-10-11 02:12:38

标签: opengl 3d file-format wireframe

我正在寻找一种用于线框模型的简单文件格式。我知道VRML,u3D等,但这些似乎对我的需求很重要。我的criterea是:

  • 必须有明确的规格。无论是开放还是非常成熟/记录。
  • 我只需要(想要)简单模型 - 顶点和边缘。我不想处理面孔或物体。如果格式支持更多,只要我可以忽略它们就没问题。
  • 最终用户工具不是必需的,但会很棒。如果没有,它必须是人类可读的(并且对于简单模型可编辑)。
  • 能够注释或至少标记节点会很好(但不是必须的)。
  • 我使用的语言无关紧要,但可能的选择是Java / C ++& OpenGL的

或者我只是更好地将顶点/边缘列表写入文本文件并完成它?

5 个答案:

答案 0 :(得分:7)

Wavefront OBJ是一种非常简单的文本文件格式,用于存储3d模型,并且所有3D建模应用程序(例如maya,3dsmax,lightwave)都支持它,因此您可以非常轻松地导出和导入模型。

您可以在此处阅读更多内容和规格:

http://www.fileformat.info/format/wavefrontobj/

我建议不要制作自己的文件格式。 Wavefront OBJ就像它获得并且指定得一样简单。

这是一个2x2平面的例子。 v 用于顶点坐标, f 用于描述面(连接的顶点):

v -0.500000 -0.000000 0.500000
v 0.000000 -0.000000 0.500000
v 0.500000 -0.000000 0.500000
v -0.500000 0.000000 0.000000
v 0.000000 0.000000 0.000000
v 0.500000 0.000000 0.000000
v -0.500000 0.000000 -0.500000
v 0.000000 0.000000 -0.500000
v 0.500000 0.000000 -0.500000
v -0.500000 -0.000000 0.500000
v 0.000000 -0.000000 0.500000
v 0.500000 -0.000000 0.500000
v -0.500000 0.000000 0.000000
v 0.000000 0.000000 0.000000
v 0.500000 0.000000 0.000000
v -0.500000 0.000000 -0.500000
v 0.000000 0.000000 -0.500000
v 0.500000 0.000000 -0.500000
f 1/1 2/2 5/5 4/4
f 2/2 3/3 6/6 5/5
f 4/4 5/5 8/8 7/7
f 5/5 6/6 9/9 8/8
f 10/10 11/11 14/14 13/13
f 11/11 12/12 15/15 14/14
f 13/13 14/14 17/17 16/16
f 14/14 15/15 18/18 17/17

答案 1 :(得分:3)

我不知道任何主动定位线框视图的格式。 (仅限边缘/顶点)你几乎总是必须至少处理面部。幸运的是,除非你有一个非常特殊的需要,除了边缘列表线框渲染可以使用面部列表中的任何API完成。

至于格式,OBJ是好的和简单的,如果有点过时。它也可能是查找文档的最简单格式。微软的X文件很适合快速和脏的渲染,但我总是偏向于Quake格式。但是,他们往往非常注重游戏,因此包含了很多你可能不想要的信息。

如果这些都不符合您的需求,可以查看COLLADA。它可能不适合你自己,但你可以编写一个快速导出器到你自己的格式,只包含边/顶点信息,那时你基本上支持这个星球上的每个建模包:)

答案 2 :(得分:1)

可能更容易在文本文件中执行这些列表。这是我想到的第一件事!

答案 3 :(得分:1)

POV-Ray的RAW triangle format是我认为最简单的。在我看来,你真的不能更简单。我在几分钟内为此实现了一个加载 - 它是非常简单的格式

答案 4 :(得分:0)

OBJ是最普遍和最简单的,但如果您需要的不仅仅是顶点位置,法线和单个纹理坐标,它就会崩溃。它根本不可扩展。它也是基于文本的,所以它在大网格上有问题。

GTO已经成为一种新的交换格式。它简单,快速,可扩展,并且有一个经过生产验证的开源代码可以读取和写入它们:

Gto File Format

这已经在几个VFX和游戏工作室中使用,但是将加载程序编写为OBJ文件(其中一个示例是OBJ到GTO转换器)的工作量相同。

检查出来,并帮助阻止Collada膨胀病毒的传播。