private void StoreRestPose(FBXScene pScene, FBXNode pSkeletonRoot, SkeletonAsset Skeleton) { Dictionary <String, FBBone> pose = Skeleton.ModelBones; FBXAMatrix lTransformMatrix = new FBXAMatrix(); FBXVector4 lT, lR, lS; lS = new FBXVector4(1.0, 1.0, 1.0, 0); FBXPose lPose = FBXPose.Create(pScene, "A Bind Pose"); lT = new FBXVector4(); lR = new FBXVector4(); lTransformMatrix.SetTRS(lT, lR, lS); FBXNode lKFbxNode = pSkeletonRoot; lPose.Add(lKFbxNode, lTransformMatrix); foreach (string key in pose.Keys) { FBBone bonePose = pose[key]; FBXNode fbxBone = pSkeletonRoot.FindChild(key); FBXVector4 Forward = new FBXVector4(bonePose.Forward.members[0], bonePose.Forward.members[1], bonePose.Forward.members[2], 0); FBXVector4 Right = new FBXVector4(bonePose.Right.members[0], bonePose.Right.members[1], bonePose.Right.members[2], 0); FBXVector4 Up = new FBXVector4(bonePose.Up.members[0], bonePose.Up.members[1], bonePose.Up.members[2], 0); FBXVector4 Trans = new FBXVector4(bonePose.Location.members[0] * exportScale, bonePose.Location.members[1] * exportScale, bonePose.Location.members[2] * exportScale, 1); FBXAMatrix boneTransform = new FBXAMatrix(); boneTransform.SetRow(0, Right); boneTransform.SetRow(1, Up); boneTransform.SetRow(2, Forward); boneTransform.SetRow(3, Trans); lPose.Add(fbxBone, boneTransform); } lPose.SetIsBindPose(true); pScene.AddPose(lPose); }
private FBXVector4 CalculateBoneRotation(FBBone bone) { FBXAMatrix fbxrotMat = new FBXAMatrix(); FBXVector4 Forward = new FBXVector4(bone.Forward.members[0], bone.Forward.members[1], bone.Forward.members[2], 0); FBXVector4 Right = new FBXVector4(bone.Right.members[0], bone.Right.members[1], bone.Right.members[2], 0); FBXVector4 Up = new FBXVector4(bone.Up.members[0], bone.Up.members[1], bone.Up.members[2], 0); fbxrotMat.SetRow(0, Right); fbxrotMat.SetRow(1, Up); fbxrotMat.SetRow(2, Forward); fbxrotMat.SetRow(3, new FBXVector4(0, 0, 0, 1)); FBXVector4 boneRot = fbxrotMat.getR(); return(boneRot); }
private void SetBoneTransform(SkeletonAsset Skeleton, FBXNode pSkeletonRoot) { Dictionary <String, FBBone> pose = Skeleton.ModelBones; foreach (string key in pose.Keys) { FBBone bonePose = pose[key]; FBXNode fbxBone = pSkeletonRoot.FindChild(key); FBXVector4 ForwardM = new FBXVector4(bonePose.Forward.members[0], bonePose.Forward.members[1], bonePose.Forward.members[2], 0); FBXVector4 RightM = new FBXVector4(bonePose.Right.members[0], bonePose.Right.members[1], bonePose.Right.members[2], 0); FBXVector4 UpM = new FBXVector4(bonePose.Up.members[0], bonePose.Up.members[1], bonePose.Up.members[2], 0); FBXVector4 TransM = new FBXVector4(bonePose.Location.members[0] * exportScale, bonePose.Location.members[1] * exportScale, bonePose.Location.members[2] * exportScale, 1); FBXAMatrix transfoMatrix = new FBXAMatrix(); transfoMatrix.SetRow(0, RightM); transfoMatrix.SetRow(1, UpM); transfoMatrix.SetRow(2, ForwardM); transfoMatrix.SetRow(3, TransM); FBXHelper.SetGlobalDefaultPosition(fbxBone, transfoMatrix); } }