我正试图导入COLLADA文件到我的应用程序显示三维模型。我使用PyCollada,因为它使得解析文件非常简单,但是不幸的是,它们不支持带孔的多边形。一个多边形(至少当从googlesketchup导出时)被认为是有洞的,如果其中还有另一个更小的多边形。在
我的程序不需要知道洞,它只需要知道每个多边形的边界顶点,然后就可以自己处理洞了。因此,我试图将COLLADA“polygons”结构(用于带孔的多边形)转换为“polylist”结构(没有孔的多边形)。在
下面是一个在我触摸文件之前该文件的某个部分是什么样子的示例:
<polylist count="4" material="Material2">
<input offset="0" semantic="VERTEX" source="#ID8" />
<vcount>3 3 3 3</vcount>
<p>16 17 18 22 23 24 28 29 30 34 35 36</p>
</polylist>
<polygons count="1" material="Material2">
<input offset="0" semantic="VERTEX" source="#ID8" />
<ph>
<p>0 1 2 3</p>
<h>4 5 6 7</h>
<h>8 9 10 11</h>
</ph>
</polygons>
这里我们有一个包含4个多边形的“polylist”,以及一个包含1个多边形的“polygons”,其中有2个子曲面或“holes”(由<h>
标记表示)。如果假设我们有<polygons count="3"
,那就意味着还有2组<ph>
标记,每个都有1个<p>
标记和1个或多个<h>
标记。在
上面有一个<float_array>
标记,它包含每个曲面中点的顶点列表;<p>
标记中的数字是每组3个坐标的索引。<vcount>
标记表示每个多边形的顶点数。在
我写了一段代码,用匹配的材质和源ID更改每对“polylist”和“polygons”的文件。它会将以前的代码块更改为以下内容:
^{pr2}$请注意,我基本上是如何将<p>
标记从“polygons”结构追加到“polylist”,并更新了<vcount>
,以反映添加的新曲面中的点数。在
这是我对该文件所做的所有更改,它适用于许多复杂的模型,但也不适用于某些模型。我找不到图案,但有时有孔的表面不会出现,有时它们直接连接的一些表面也不会出现。在
出于这个原因,我认为问题只是一些标签属性,我可能没有在某个地方更新,但我对COLLADA文件格式不够熟悉,不知道问题出在哪里。到目前为止,我所做的一切都只是从分析文件和弄清楚事情的含义开始的,而我还没有找到任何我认为我需要改变的东西。在
那么,在编辑COLLADA文件时,有什么需要注意的吗,比如对polylists/polygons数量的引用,或者ID匹配,或者诸如此类的东西?如果我搞不清这一点,我可能只会在丢失的曲面中手动解析,但是如果我能够通过PyCollada来进行解析,那会更加方便。在
目前没有回答
相关问题 更多 >
编程相关推荐