Blender能导出每个顶点的UV坐标吗?

2 投票
2 回答
4984 浏览
提问于 2025-04-17 04:27

有没有可能为Blender写一个导出工具,可以按每个顶点的级别导出网格的UV纹理坐标,而不是像现在这样从面上导出标准的UV?

我其实不是很懂Python,只用了两天,但我已经写了一个简单的Android网格导出工具...我能把顶点和索引导出到数组里,但就是无法以同样的方式导出UV坐标...我只能得到与面顶点相关的UV,这样不太好用....

我不太确定怎么发Python代码,因为格式问题,但这是我获取所有信息并放入数组的部分:

    obverts = bpy.context.active_object.data.vertices
    obfaces = bpy.context.active_object.data.faces
    verts = []
    indices = []
    tex = []

    for vertex in obverts:
        verts.append(vertex.co.x)
        verts.append(vertex.co.y)
        verts.append(vertex.co.z)

    for face in obfaces:
        indices.append(face.vertices[0])
        indices.append(face.vertices[1])
        indices.append(face.vertices[2])
        face_index = face.index
        for u,v in bpy.context.active_object.data.uv_textures.active.data[ face_index ].uv:
            tex.append(u)
            tex.append(v)

现在这一切都很好,除了最后四行获取UV坐标的部分...这里是从面上获取UV的...但我该怎么才能根据data.vertices来获取UV呢?我看到有提到“粘性UV坐标”,但在我用的Blender版本里找不到这个选项。我用的是Blender 2.57,今天花了一整天在找答案,如果有人能帮忙,我会非常感激。

2 个回答

0

你可以为每个顶点导出UV坐标,前提是你把物体的所有面分开。

(是的,这样会导致一些顶点被多个面重复使用)


先进入编辑模式。

把所有的边标记为锐利的。


然后切换回物体模式。

给物体添加并应用“边缘分割”这个修改器。


现在所有的面都使用独特的顶点和边,

这样每个顶点都有自己独立的UV坐标。

2

我可以把顶点和索引导出到数组里,但我就是无法以同样的方式导出UV坐标……我只能得到与面顶点相关的UV,这样并不是很有用……

UV坐标必须与面相关,因为每个顶点在它所属的每个多边形中可能有不同的UV。

举个例子,想象一个每个面都有不同纹理的立方体。一个顶点在一个面上可能是左上角,而在旁边的面上可能是右上角。

撰写回答