// Construct the Armature object from mesh skeleton KV data. public void ConstructFromNTRO(NTROStruct skeletonData, Dictionary <int, int> remapTable) { var boneNames = skeletonData.Get <NTROArray>("m_boneName").ToArray <string>(); var boneParents = skeletonData.Get <NTROArray>("m_nParent").ToArray <short>(); var bonePositions = skeletonData.Get <NTROArray>("m_bonePosParent").ToArray <Vector3>(); var boneRotations = skeletonData.Get <NTROArray>("m_boneRotParent").ToArray <Vector4>(); // Initialise bone array Bones = new Bone[boneNames.Length]; //Add all bones to the list for (var i = 0; i < boneNames.Length; i++) { var name = boneNames[i]; var position = new OpenTK.Vector3(bonePositions[i].X, bonePositions[i].Y, bonePositions[i].Z); var rotation = new Quaternion(boneRotations[i].X, boneRotations[i].Y, boneRotations[i].Z, boneRotations[i].W); // Create bone var index = remapTable.ContainsKey(i) ? remapTable[i] : -1; var bone = new Bone(name, index, position, rotation); if (boneParents[i] != -1) { bone.SetParent(Bones[boneParents[i]]); Bones[boneParents[i]].AddChild(bone); } Bones[i] = bone; } FindRoots(); }
// Construct the Armature object from mesh skeleton KV data. public void ConstructFromNTRO(NTROStruct skeletonData, Dictionary<int, int> remapTable) { var boneNames = skeletonData.Get<NTROArray>("m_boneName").ToArray<string>(); var boneParents = skeletonData.Get<NTROArray>("m_nParent").ToArray<short>(); var bonePositions = skeletonData.Get<NTROArray>("m_bonePosParent").ToArray<Vector3>(); var boneRotations = skeletonData.Get<NTROArray>("m_boneRotParent").ToArray<Vector4>(); // Initialise bone array Bones = new Bone[boneNames.Length]; //Add all bones to the list for (var i = 0; i < boneNames.Length; i++) { var name = boneNames[i]; var position = new OpenTK.Vector3(bonePositions[i].X, bonePositions[i].Y, bonePositions[i].Z); var rotation = new Quaternion(boneRotations[i].X, boneRotations[i].Y, boneRotations[i].Z, boneRotations[i].W); // Create bone var index = remapTable.ContainsKey(i) ? remapTable[i] : -1; var bone = new Bone(name, index, position, rotation); if (boneParents[i] != -1) { bone.SetParent(Bones[boneParents[i]]); Bones[boneParents[i]].AddChild(bone); } Bones[i] = bone; } FindRoots(); }