我正在尝试将向量添加到选定的对象顶点。
def force(self):
gravity = mathutils.Vector((0.0, 0.0, -0.5))
obj = bpy.context.object
obj.data.vertices[0].co += gravity
如您所见,顶点的平移仍然应用于对象局部空间。
我尝试过的解决方案是使用对象“matrix_world”。这不起作用,因为我随后获得了对象变换的单位矩阵,它根本没有改变,因为我正在变换顶点,而不是对象。
非常感谢任何帮助。
我找到了解决方案!
gravity = mathutils.Vector((0.0, 0.0, -0.3))
obj = bpy.context.object
depsgraph = bpy.context.evaluated_depsgraph_get()
scene = bpy.data.scenes['Scene']
obj.crazyspace_eval(depsgraph, scene)
delta = obj.crazyspace_displacement_to_original(vertex_index=0, displacement=gravity)
obj.data.vertices[0].co += delta
obj.crazyspace_eval_clear()
在我的对象上运行“crazyspace_eval()”方法,然后将“crazyspace_displacement_to_original()”的结果添加到我的顶点坐标解决了这个问题。
解决方案可视化 :https://i.sstatic.net/82GgxmAT.jpg
如图所示,在物体被骨架修改器变形之前(1)和之后(2)添加到物体上的“重力”矢量。