Skip to content

Instantly share code, notes, and snippets.

@piyanggoon
Last active March 16, 2019 17:44
Show Gist options
  • Save piyanggoon/d41ced8450565b390f15da89b34cd8de to your computer and use it in GitHub Desktop.
Save piyanggoon/d41ced8450565b390f15da89b34cd8de to your computer and use it in GitHub Desktop.
import MaxPlus
from MaxPlus import Matrix3, Point4, Point3, Quat
class Bones:
name = ''
parentID = -1
mAbsPlacement = Matrix3()
qRelPlacement = Quat()
vRelPlacement = Point3()
def __init__(self, name, parentID, mAbsPlacement):
self.name = name
self.parentID = parentID
self.mAbsPlacement = mAbsPlacement
def createMatrix3(args):
matrix = Matrix3()
matrix.SetColumn(0, Point4(args[0][0], args[0][1], args[0][2], args[0][3]))
matrix.SetColumn(1, Point4(args[1][0], args[1][1], args[1][2], args[1][3]))
matrix.SetColumn(2, Point4(args[2][0], args[2][1], args[2][2], args[2][3]))
return matrix
bones = [
Bones(
'Bip01', -1,
createMatrix3((
(1.37091e-006, 0, 1, 0),
(-0, 1, 0, 0.970667),
(-1, -0, 1.37091e-006, 0),
))
),
Bones(
'Bip01_Pelvis', 0,
createMatrix3((
(-1.54972e-006, 1, 2.75771e-006, 0),
(1, 1.49012e-006, 2.27374e-013, 0.970667),
(-3.97904e-012, 2.75771e-006, -1, 0),
))
),
Bones(
'Bip01_Spine', 1,
createMatrix3((
(5.96046e-008, 1, -1.40257e-006, -1.74623e-010),
(0.999601, -1.19209e-007, -0.0282606, 1.04923),
(-0.0282606, -1.40071e-006, -0.999601, 0.000120609),
))
),
Bones(
'Bip01_Spine1', 2,
createMatrix3((
(0, 1, -1.40071e-006, 5.54428e-009),
(0.997484, 0, 0.0708926, 1.20075),
(0.0708926, -1.40071e-006, -0.997484, -0.00404723),
))
),
Bones(
'Bip01_Spine2', 3,
createMatrix3((
(-1.19209e-007, 1, -1.40816e-006, -8.81846e-009),
(0.995325, 1.78814e-007, 0.096579, 1.34641),
(0.096579, -1.38953e-006, -0.995325, 0.00642613),
))
),
Bones(
'Bip01_Neck', 4,
createMatrix3((
(-1.19209e-007, 1, -1.40816e-006, -3.28e-008),
(0.995325, 1.78814e-007, 0.096579, 1.52596),
(0.096579, -1.38953e-006, -0.995325, 0.0239265),
))
),
Bones(
'Bip01_Head', 5,
createMatrix3((
(2.98023e-007, 1, 5.66244e-007, -4.56785e-008),
(0.98681, -3.57628e-007, -0.161886, 1.62279),
(-0.161886, 6.18398e-007, -0.986809, 0.033322),
))
),
Bones(
'Bip01_L_Clavicle', 5,
createMatrix3((
(1, -8.9776e-008, -1.36439e-006, 0.0497039),
(-4.35036e-008, 0.995248, -0.0973716, 1.49728),
(1.36665e-006, 0.0973716, 0.995248, 0.0499241),
))
),
Bones(
'Bip01_L_UpperArm', 7,
createMatrix3((
(0.674603, 0.738152, 0.0065061, 0.172519),
(-0.736347, 0.673522, -0.064509, 1.49728),
(-0.0519994, 0.0387272, 0.997896, 0.0499242),
))
),
Bones(
'Bip01_L_Forearm', 8,
createMatrix3((
(0.630682, 0.738152, 0.239525, 0.389844),
(-0.668541, 0.673522, -0.315309, 1.26007),
(-0.394072, 0.0387273, 0.918263, 0.0331725),
))
),
Bones(
'Bip01_L_Hand', 9,
createMatrix3((
(0.523932, 0.194578, -0.829238, 0.555308),
(-0.791631, -0.248063, -0.558378, 1.08467),
(-0.314351, 0.949002, 0.0240656, -0.0702147),
))
),
Bones(
'Bip01_L_Finger0', 10,
createMatrix3((
(-0.233801, 0.963749, 0.128552, 0.543612),
(-0.210396, 0.0789354, -0.974424, 1.06287),
(-0.949248, -0.254868, 0.184313, -0.110958),
))
),
Bones(
'Bip01_L_Finger01', 11,
createMatrix3((
(-0.221569, 0.963749, 0.148647, 0.536538),
(-0.295409, 0.0789353, -0.952104, 1.05651),
(-0.929323, -0.254868, 0.267211, -0.139678),
))
),
Bones(
'Bip01_L_Finger02', 12,
createMatrix3((
(-0.228105, 0.963749, 0.138408, 0.528791),
(-0.251769, 0.0789353, -0.964563, 1.04618),
(-0.940521, -0.254868, 0.224636, -0.172171),
))
),
Bones(
'Bip01_L_Finger1', 10,
createMatrix3((
(0.322455, 0.456214, -0.829392, 0.600236),
(-0.51237, -0.652619, -0.55818, 1.02161),
(-0.795927, 0.604944, 0.0233099, -0.1331),
))
),
Bones(
'Bip01_L_Finger11', 14,
createMatrix3((
(0.233018, 0.456214, -0.85882, 0.611954),
(-0.568478, -0.652619, -0.50092, 1.00299),
(-0.789009, 0.604944, 0.107275, -0.162023),
))
),
Bones(
'Bip01_L_Finger12', 15,
createMatrix3((
(0.21751, 0.456214, -0.862878, 0.618898),
(-0.577409, -0.652619, -0.490598, 0.986048),
(-0.786949, 0.604944, 0.121471, -0.185536),
))
),
Bones(
'Bip01_L_Finger2', 10,
createMatrix3((
(0.434103, 0.229948, -0.871021, 0.612319),
(-0.818494, -0.303228, -0.487976, 1.01154),
(-0.376327, 0.924758, 0.0565786, -0.110819),
))
),
Bones(
'Bip01_L_Finger21', 17,
createMatrix3((
(0.350078, 0.229948, -0.908058, 0.628927),
(-0.860842, -0.303228, -0.408662, 0.980227),
(-0.369319, 0.924758, 0.0917951, -0.125217),
))
),
Bones(
'Bip01_L_Finger22', 18,
createMatrix3((
(0.331855, 0.229948, -0.914875, 0.640509),
(-0.868839, -0.303228, -0.391371, 0.951748),
(-0.36741, 0.924758, 0.09916, -0.137436),
))
),
Bones(
'Bip01_L_Finger3', 10,
createMatrix3((
(0.386128, -0.0475858, -0.921217, 0.610692),
(-0.915516, 0.102408, -0.389029, 0.995393),
(0.112853, 0.993604, -0.00402284, -0.0882958),
))
),
Bones(
'Bip01_L_Finger31', 20,
createMatrix3((
(0.24511, -0.0475858, -0.968327, 0.624297),
(-0.963119, 0.102408, -0.248825, 0.963138),
(0.111005, 0.993604, -0.0207295, -0.0843198),
))
),
Bones(
'Bip01_L_Finger32', 21,
createMatrix3((
(0.198449, -0.0475859, -0.978955, 0.630192),
(-0.973932, 0.102408, -0.202409, 0.939974),
(0.109885, 0.993604, -0.0260224, -0.08165),
))
),
Bones(
'Bip01_L_Finger4', 10,
createMatrix3((
(0.337341, -0.170878, -0.925744, 0.598514),
(-0.876794, 0.300945, -0.375053, 0.995795),
(0.342687, 0.938207, -0.0483041, -0.0616173),
))
),
Bones(
'Bip01_L_Finger41', 23,
createMatrix3((
(0.114147, -0.170878, -0.978658, 0.605583),
(-0.939754, 0.300945, -0.162156, 0.977422),
(0.322231, 0.938207, -0.126232, -0.0544363),
))
),
Bones(
'Bip01_L_Finger42', 24,
createMatrix3((
(0.100608, -0.170878, -0.980142, 0.607528),
(-0.941906, 0.300945, -0.14915, 0.96141),
(0.320455, 0.938207, -0.130674, -0.0489458),
))
),
Bones(
'Bip01_L_ForeTwist', 8,
createMatrix3((
(0.630682, 0.737078, 0.242809, 0.389844),
(-0.668541, 0.674919, -0.312308, 1.26007),
(-0.394072, 0.0346396, 0.918427, 0.0331725),
))
),
Bones(
'Bip01_L_ForeTwist1', 26,
createMatrix3((
(0.630682, 0.73599, 0.246087, 0.472576),
(-0.668541, 0.676302, -0.309301, 1.17237),
(-0.394072, 0.0305513, 0.918572, -0.0185211),
))
),
Bones(
'Bip01_R_Clavicle', 5,
createMatrix3((
(-1, 1.77199e-007, -1.36439e-006, -0.0497041),
(-4.35037e-008, -0.995248, -0.0973716, 1.49728),
(-1.37516e-006, -0.0973716, 0.995248, 0.0499239),
))
),
Bones(
'Bip01_R_UpperArm', 28,
createMatrix3((
(-0.674603, 0.738152, -0.00650883, -0.172519),
(-0.736347, -0.673522, -0.064509, 1.49728),
(-0.0520013, -0.0387252, 0.997896, 0.0499238),
))
),
Bones(
'Bip01_R_Forearm', 29,
createMatrix3((
(-0.630681, 0.738152, -0.239528, -0.389845),
(-0.668541, -0.673522, -0.315309, 1.26007),
(-0.394074, -0.0387252, 0.918263, 0.0331714),
))
),
Bones(
'Bip01_R_Hand', 30,
createMatrix3((
(-0.523931, 0.19458, 0.829238, -0.555307),
(-0.791631, 0.248063, -0.558378, 1.08467),
(-0.314352, -0.949001, 0.0240678, -0.0702162),
))
),
Bones(
'Bip01_R_Finger0', 31,
createMatrix3((
(0.233804, 0.963748, -0.128553, -0.543611),
(-0.210396, -0.0789354, -0.974424, 1.06287),
(-0.949247, 0.254871, 0.184313, -0.110959),
))
),
Bones(
'Bip01_R_Finger01', 32,
createMatrix3((
(0.221571, 0.963748, -0.148648, -0.536538),
(-0.295409, -0.0789353, -0.952104, 1.05651),
(-0.929322, 0.254871, 0.26721, -0.13968),
))
),
Bones(
'Bip01_R_Finger02', 33,
createMatrix3((
(0.228107, 0.963748, -0.138409, -0.52879),
(-0.251769, -0.0789354, -0.964563, 1.04618),
(-0.940521, 0.254871, 0.224636, -0.172172),
))
),
Bones(
'Bip01_R_Finger1', 31,
createMatrix3((
(-0.322453, 0.456216, 0.829392, -0.600236),
(-0.51237, 0.652619, -0.55818, 1.02161),
(-0.795928, -0.604943, 0.0233122, -0.133101),
))
),
Bones(
'Bip01_R_Finger11', 35,
createMatrix3((
(-0.233016, 0.456216, 0.858819, -0.611953),
(-0.568478, 0.652619, -0.50092, 1.00299),
(-0.78901, -0.604943, 0.107278, -0.162025),
))
),
Bones(
'Bip01_R_Finger12', 36,
createMatrix3((
(-0.217508, 0.456216, 0.862877, -0.618897),
(-0.577409, 0.652619, -0.490598, 0.986048),
(-0.786949, -0.604943, 0.121473, -0.185537),
))
),
Bones(
'Bip01_R_Finger2', 31,
createMatrix3((
(-0.434103, 0.22995, 0.871021, -0.612318),
(-0.818494, 0.303228, -0.487976, 1.01154),
(-0.376328, -0.924757, 0.056581, -0.110821),
))
),
Bones(
'Bip01_R_Finger21', 38,
createMatrix3((
(-0.350077, 0.22995, 0.908058, -0.628927),
(-0.860842, 0.303228, -0.408662, 0.980227),
(-0.36932, -0.924757, 0.0917976, -0.125219),
))
),
Bones(
'Bip01_R_Finger22', 39,
createMatrix3((
(-0.331854, 0.22995, 0.914875, -0.640509),
(-0.868839, 0.303228, -0.391371, 0.951748),
(-0.367411, -0.924757, 0.0991623, -0.137437),
))
),
Bones(
'Bip01_R_Finger3', 31,
createMatrix3((
(-0.386129, -0.0475831, 0.921217, -0.610692),
(-0.915516, -0.102408, -0.389029, 0.995393),
(0.112851, -0.993604, -0.00402033, -0.0882975),
))
),
Bones(
'Bip01_R_Finger31', 41,
createMatrix3((
(-0.245111, -0.0475831, 0.968327, -0.624296),
(-0.963119, -0.102408, -0.248825, 0.963138),
(0.111005, -0.993604, -0.0207269, -0.0843215),
))
),
Bones(
'Bip01_R_Finger32', 42,
createMatrix3((
(-0.19845, -0.0475832, 0.978955, -0.630191),
(-0.973932, -0.102408, -0.202409, 0.939974),
(0.109884, -0.993604, -0.0260198, -0.0816517),
))
),
Bones(
'Bip01_R_Finger4', 31,
createMatrix3((
(-0.337342, -0.170876, 0.925744, -0.598514),
(-0.876794, -0.300945, -0.375053, 0.995795),
(0.342686, -0.938208, -0.0483016, -0.061619),
))
),
Bones(
'Bip01_R_Finger41', 44,
createMatrix3((
(-0.114148, -0.170876, 0.978658, -0.605583),
(-0.939754, -0.300945, -0.162156, 0.977422),
(0.322231, -0.938208, -0.126229, -0.054438),
))
),
Bones(
'Bip01_R_Finger42', 45,
createMatrix3((
(-0.100609, -0.170876, 0.980142, -0.607528),
(-0.941906, -0.300945, -0.14915, 0.96141),
(0.320455, -0.938208, -0.130671, -0.0489475),
))
),
Bones(
'PrimaryWeaponBone', 31,
createMatrix3((
(-0.526227, -0.843175, 0.110185, -0.57763),
(-0.769052, 0.527196, 0.361417, 1.01491),
(-0.362827, 0.105449, -0.925871, -0.158542),
))
),
Bones(
'Bip01_R_ForeTwist', 29,
createMatrix3((
(-0.630681, 0.737078, -0.242811, -0.389845),
(-0.668541, -0.674919, -0.312308, 1.26007),
(-0.394074, -0.0346375, 0.918426, 0.0331714),
))
),
Bones(
'Bip01_R_ForeTwist1', 48,
createMatrix3((
(-0.630681, 0.73599, -0.24609, -0.472576),
(-0.668541, -0.676302, -0.309301, 1.17237),
(-0.394074, -0.0305492, 0.918571, -0.0185224),
))
),
Bones(
'Weapon_BackLeft', 4,
createMatrix3((
(0.00148118, -0.99515, -0.0983545, 0.138991),
(-0.999995, -0.00174236, 0.00256876, 1.4428),
(-0.00272767, 0.0983502, -0.995148, 0.193429),
))
),
Bones(
'Weapon_BackRPG', 4,
createMatrix3((
(-0.00844467, -0.933033, 0.35969, 0.188537),
(0.999964, -0.00765336, 0.00362405, 1.34225),
(-0.000628516, 0.359708, 0.933065, 0.17891),
))
),
Bones(
'Weapon_BackRight', 4,
createMatrix3((
(-0.0167381, 0.9998, -0.0109101, -0.154411),
(-0.9997, -0.0165395, 0.0180461, 1.39075),
(0.0178621, 0.0112088, 0.999778, 0.197446),
))
),
Bones(
'Bip01_L_Thigh', 2,
createMatrix3((
(0.0654197, -0.997829, -0.00761204, 0.101581),
(-0.997733, -0.065289, -0.016307, 0.970667),
(0.0157746, 0.00866159, -0.999838, 9.68575e-008),
))
),
Bones(
'Bip01_L_Calf', 53,
createMatrix3((
(0.0657247, -0.997829, 0.00423473, 0.132318),
(-0.978659, -0.065289, -0.194842, 0.501888),
(0.194695, 0.00866158, -0.980826, 0.0074117),
))
),
Bones(
'Bip01_L_Foot', 54,
createMatrix3((
(0, -1, 1.37091e-006, 0.158338),
(-1, 0, -4.37113e-008, 0.114441),
(4.37114e-008, -1.37091e-006, -1, 0.0844908),
))
),
Bones(
'Bip01_L_Toe0', 55,
createMatrix3((
(1.37091e-006, -1, 0, 0.158338),
(0, 0, 1, 0.0103378),
(-1, -1.40071e-006, 0, -0.0378982),
))
),
Bones(
'Weapon_Side', 53,
createMatrix3((
(0.0618329, -0.245955, 0.967307, 0.253232),
(-0.992208, -0.120183, 0.0328659, 0.912602),
(0.10817, -0.961801, -0.25147, -0.0294574),
))
),
Bones(
'Bip01_R_Thigh', 2,
createMatrix3((
(-0.0654202, -0.997829, 0.00761478, -0.101581),
(-0.997733, 0.0652893, -0.016307, 0.970667),
(0.0157744, -0.00866432, -0.999838, -1.82539e-007),
))
),
Bones(
'Bip01_R_Calf', 58,
createMatrix3((
(-0.0657254, -0.997829, -0.00423207, -0.132318),
(-0.978659, 0.0652891, -0.194842, 0.501888),
(0.194695, -0.00866431, -0.980826, 0.00741134),
))
),
Bones(
'Bip01_R_Foot', 59,
createMatrix3((
(0, -1, 1.37091e-006, -0.158339),
(-1, 0, -4.37113e-008, 0.114441),
(4.37114e-008, -1.37091e-006, -1, 0.0844904),
))
),
Bones(
'Bip01_R_Toe0', 60,
createMatrix3((
(1.37091e-006, -1, 0, -0.158339),
(0, 0, 1, 0.0103378),
(-1, -1.40071e-006, 0, -0.0378986),
))
)
]
for i, b in enumerate(bones):
mpi = Matrix3()
if(b.parentID == -1):
Matrix3.ToIdentity(mpi)
else:
mpi = bones[b.parentID].mAbsPlacement
Matrix3.Invert(mpi) #in ? out
mr = b.mAbsPlacement * mpi
q = Quat(mr)
s = mr.GetScale()
bones[i].vRelPlacement = mr.GetRow(3)
bones[i].qRelPlacement = q.Vector()
print(bones[i].vRelPlacement)
print(bones[i].qRelPlacement)
print(s)
print('====================')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment