Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Latex 1.80 KB | None | 0 0
  1. def animate_armature(frame, armature, armatureObj, pose_bones, child, offset=None):
  2.     name = child.name
  3.     pose_bone = pose_bones[name]
  4.     rest_bone = armature.bones[name]
  5.    
  6.     frame_vals = frame.bones.get(name, Vector())
  7.     offset = offset or Vector(0., 0., 0.)
  8.    
  9.     rvals = (radians(frame_vals.x), radians(frame_vals.y), radians(frame_vals.z))
  10.     cx, cy, cz = cos(rvals)
  11.     sx, sy, sz = sin(rvals)
  12.     trans_matrix = array([
  13.        [cy*cz, -cx*sz + sx*sy*cz,  sx*sz + cx*sy*cz, 0.],
  14.         [cy*sz,  cx*cz + sx*sy*sz, -sx*cz + cx*sy*sz, 0.],
  15.         [-sy,    sx*cy,             cx*cy           , 0.],
  16.         [0.,     0.,                0.,               1.],
  17.     ]).T
  18.  
  19.     offset_matrix = array([
  20.        [1., 0., 0., offset.x],
  21.         [0., 1., 0., offset.y],
  22.         [0., 0., 1., offset.z],
  23.         [0., 0., 0., 1.]
  24.     ])
  25.  
  26.     trans_matrix = dot(dot(dot(offset_matrix, child.axis_rot), trans_matrix), child.axis_rot_inv)
  27.  
  28.     mat = asmatrix(trans_matrix)[:3,:3].T.I
  29.     result = toEulerXYZ(array(mat, copy=False))
  30.    
  31.     mats = [RotationMatrix(degrees(result[0])%360,3,'x'), RotationMatrix(degrees(result[1])%360,3,'y'), RotationMatrix(degrees(result[2])%360,3,'z')]
  32.     bone_rotation_matrix = (mats[2]*(mats[1]* (mats[0]* MATRIX_IDENTITY_3x3))).resize4x4()
  33.    
  34.     bone_rest_matrix = rest_bone.matrix['ARMATURESPACE'].rotationPart().resize4x4()
  35.     bone_rest_matrix_inv = Matrix(bone_rest_matrix).invert()
  36.    
  37.     pose_bone.quat = (bone_rest_matrix * bone_rotation_matrix * bone_rest_matrix_inv).toQuat()
  38.     pose_bone.insertKey(armatureObj, frame.number, [Blender.Object.Pose.ROT], True)
  39.    
  40.     new_offset = Vector([x*child.length for x in child.direction])
  41.     for child in child.children:
  42.         animate_armature(frame, armature, armatureObj, pose_bones, child, new_offset)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement