如何设置对象的UV纹理坐标并使用python计算切线空间?

时间:2018-10-14 14:33:32

标签: python textures blender collada uv-mapping

对于大学项目,由于OpenGL,我必须能够加载对象。该对象是COLLADA(.DAE),并且是使用行进立方体算法(mcubes.marching_cubes)创建的。该对象没有切线空间,但是需要将其导入OpenGL。

我要解决此问题的选择是将UV纹理添加到对象,然后计算切线。如程序所示,我感谢bpy模块添加了纹理,并使用pycollada模块来计算切线。

bpy.ops.wm.collada_import(filepath=filepath_in)
material = bpy.data.materials.new(matName)
material.diffuse_color = (r,g,b)

bpy.context.object.data.materials.append(material)
texUV = bpy.data.textures.new(textName, type="IMAGE")   
image = bpy.data.images.load(imagePath)
texUV.image = image

bpy.data.materials[matName].texture_slots.add()
bpy.data.materials[matName].active_texture = texUV 
bpy.data.materials[matName].texture_slots[0].texture_coords = "UV"
bpy.data.materials[matName].texture_slots[0].mapping = "FLAT"

#export réussi en collada 
bpy.ops.wm.collada_export(filepath=filepath_out, check_existing=True, filter_blender=True, filter_image=True, filter_movie=False, filter_python=False, filter_font=False, filter_sound=False, filter_text=False, filter_btx=False, filter_collada=True, filter_folder=True, filemode=8, apply_modifiers=True, export_mesh_type=0, export_mesh_type_selection='view', selected=True, include_children=False, include_armatures=False, deform_bones_only=False, active_uv_only=False, include_shapekeys=False, use_texture_copies=True, use_object_instantiation=True, sort_by_name=False)


def generateTexTg(inputDAE, outputDAE):
        my_mesh = Collada(inputDAE) 
        my_geom = my_mesh.geometries[0]
        my_triset = my_geom.primitives[0]
        print (my_triset.vertex[my_triset.vertex_index][0])
        print ("normal")
        print (my_triset.normal[my_triset.normal_index][0])
        print ("tg")
        #here comes the error
        print (my_triset.texcoordset[0][my_triset.texcoord_indexset[0]][0])
        my_triset.generateTexTangentsAndBinormals()
        my_mesh.write(outputDAE)
        print("tangentes ok")

当我在Blender中可视化对象时,我可以看到确实添加了纹理。尝试计算切线时遇到的问题是对象没有纹理坐标。

所以,第一个问题是我给的程序中有问题吗?

第二个是如果您必须计算对象的切线空间,您将如何处理?

谢谢您的帮助

0 个答案:

没有答案