Для университетского проекта я должен быть в состоянии загрузить объект благодаря 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, я вижу, что текстура действительно добавлена.Проблема, которую я получаю, когда пытаюсь вычислить касательные, состоит в том, что у объекта нет текстурных координат.
Итак, первый вопрос: есть ли проблема в программе, которую я дал?
Во-вторых, если бы вам нужно было вычислить касательное пространство объекта, как бы вы это сделали?
Спасибо за помощь