我正在使用 OpenGL 制作渲染器。我在 Blender / Sketchup 中有纹理模型(我可以轻松地在两者之间交换),并且我希望能够将这些文件导出到我的渲染器中。我最初的想法是简单地导出原始面并渲染这些三角形,但我也想轻松地将纹理文件切片为纹理坐标。

我的意思是我的模型脸被雕刻成三角形。你可以看到在 这个图片 (转载如下)我的曲线变成了 24 个三角形。我想知道每个三角形使用什么纹理坐标。

Polygonized curved 3D object

DAE 文件是最简单的方法吗?我一直在阅读该格式的规范,它看起来很简单。我想我可以解析 XML 并在 OpenGL 中忠实地重新创建模型。我想知道是否有更简单的方法(即一个不会重新发明轮子的人)。

有帮助吗?

解决方案

如果您熟悉解析.dae格式,请确保使用它。但是,如果你只在出口兴趣的纹理三角形网格我会考虑使用 .OBJ格式这是更为简单解析。从我可以告诉既SketchUp和搅拌机可以导出这种格式。

其他提示

如果二进制格式不吓唬你,我建议写一个搅拌机和Sketchup的插件和出口几何预焙成堆积的顶点数组。

有关此方法的美妙的事情是,有一个在你的应用程序无需解析类型转换。一切准备就绪简单连续的内存拷贝发送给GPU。大静态几何形状。

一个剥离下来混合器出口看起来像这样:


#!BPY
import bpy, struct
from Blender import *

self.fh = open("MyFileName", "w")
m = bpy.data.meshes["MyMeshName"]
faces = m.faces
for face in faces:
    for (vertex, uv) in zip(face.verts, face.uv):
        self.fh.write(struct.pack('<fff', *vertex.co)) # coords
        self.fh.write(struct.pack('<fff', *vertex.no)) # normals
        self.fh.write(struct.pack('<ff',  uv.x, uv.y)) # uvs

self.fh.close()

如果你想解析 .dae 文件,我建议查看一下 科拉达 解析器。.dae 实际上是 Collada 文件的扩展名,是 科罗诺斯集团 (OpenGL 维护者)拥有用于 3D 数据交换的单一统一文件格式。

至于现有的解析器,这是我遇到的:

  • 科拉达多姆, ,参考实现。顾名思义,它只是 XML 树的抽象。
  • 科拉达, ,一个更好的抽象。然而,这个项目已经停止了近两年了,而且根据我收集的信息,我们将来不太可能看到任何更新。
  • 开放式柯拉达, ,最近的新努力。还没有尝试过,但它背后有一个活跃的社区。

话虽这么说,如果您的唯一目标是加载带有顶点、法线和纹理坐标的简单几何图形,请使用 .obj 文件格式可能是一种更快的方法。

通过建模程序(例如搅拌机或SketchUp的)中使用的任何像样的文件格式将包括重新创建你看到的几何形状所必需的所有信息。这应包括几何形状的类型(例如三角形条带,三角形个体等),对于几何形状的顶点和法线,所使用的材料特性,并且还与相应的纹理坐标一起使用的纹理。如果有什么事情是从一个潜在的文件格式缺乏,选择另外一个。

如果您认为解析XML很简单,那么我希望你打算用现有的库要做到这一点,如外籍人士,Xerces的,或其他一些语言具体实现。

在考虑导入/导出,首先尝试找到一个开源库,可以办理进口为您和把数据提供给你的程序在一个合理的格式。如果这是不可用的,你必须编写自己的进口商,然后试图找到一个简单的ASCII(不是基于XML的的),或者适合您的需要二进制格式。 PLY可能是合适的。只能作为最后的手段,我会建议您尝试实施基于XML格式的进口商。

还有: lib3ds的 - http://www.lib3ds.org/ LibOBJ(不会让我后链接)

您应该看一看:

http://sketchup.google.com/community/developers.html

SketchUp的团队提供C ++ COM服务器是免费的。用这种方法,你可以得到有关.skp文件获取大量的信息。

您应该能够使用这个COM服务器编写.skp进口商为您的应用程序。

您应该尝试,如果你可以得到.tlb文件。这将让您使用智能指针,这将简化您的进口商(COM客户端)

我使用的版本6 SDK(其中包括TLB文件)。 SDK的当前版本不似乎包括此文件。

有人贴在开发者论坛中的溶液(失踪TLB文件): http://groups.google.com/group/su-sdk-fileshare/主题

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top