Python “转换衣领”;“多边形”;结构改为“a”;“多段列表”;结构
我正在尝试将COLLADA文件导入我的应用程序以显示三维模型。我使用PyCollada,因为它使解析文件变得非常简单,但不幸的是,它们不支持带孔的多边形。如果多边形(至少在从Google Sketchup导出时)内有另一个较小的多边形,则该多边形被视为有孔 我的程序不需要知道孔,它只需要知道每个多边形的边界顶点,然后处理孔本身。因此,我尝试将COLLADA“多边形”结构(用于带孔多边形的结构)转换为“多段列表”结构(无孔多边形) 下面是一个示例,显示了在我触摸文件之前文件的哪个部分是什么样子:Python “转换衣领”;“多边形”;结构改为“a”;“多段列表”;结构,python,collada,Python,Collada,我正在尝试将COLLADA文件导入我的应用程序以显示三维模型。我使用PyCollada,因为它使解析文件变得非常简单,但不幸的是,它们不支持带孔的多边形。如果多边形(至少在从Google Sketchup导出时)内有另一个较小的多边形,则该多边形被视为有孔 我的程序不需要知道孔,它只需要知道每个多边形的边界顶点,然后处理孔本身。因此,我尝试将COLLADA“多边形”结构(用于带孔多边形的结构)转换为“多段列表”结构(无孔多边形) 下面是一个示例,显示了在我触摸文件之前文件的哪个部分是什么样子:
<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>
3 3 3 3
16 17 18 22 23 24 28 29 30 34 35 36
01 2 3
4 5 6 7
8 9 10 11
这里我们有一个包含4个多边形的“多段线”和一个包含1个多边形的“多边形”,其中有2个子曲面或“孔”(由
标记表示)。如果说我们有晚了一点,但是Assimp或Three.js loader都还没有处理漏洞。规范1.5对孔的描述也相当隐晦。甚至都不是一个处理它们的好例子。@vlzvl我相信我的更改最终都能正常工作。我已经有一段时间没有处理这个问题了,但是如果我没有记错的话,上面描述的方法是有效的,但是我的代码最初跳过了一些多段线。事后看来,使用COLLADA格式手动将孔转换为自己的曲面并不难。我只是需要一些时间来找出我自己代码中的错误。我曾经发现一个模型,它是。
描述了一堵平墙,。
描述了模型的实体部分(用
等进行解析)。解决方案是从平壁上减去这些实心部分,以填充孔洞,从而得到缺失的部分(说起来容易做起来难)。你的解决方案能处理这些问题吗?因为上面发布的片段只是粘贴了
,有效地覆盖了大量已经解析的原语。例如,检查这个。
<polylist count="5" material="Material2">
<input offset="0" semantic="VERTEX" source="#ID8" />
<vcount>3 3 3 3 4</vcount>
<p>16 17 18 22 23 24 28 29 30 34 35 36 0 1 2 3</p>
</polylist>