void Skeleton::ReadFrom(ChunkReader& file) { GChunk skeletonChunk = file.ReadChunkHeader(); UINT NumberOfBones = 0; file.Read(NumberOfBones); m_Bones.resize(NumberOfBones); m_OldJointPositions2D.resize(m_IKNumLinks); m_CurrentJointPositions2D.resize(m_IKNumLinks); m_TargetJointPositions2D.resize(m_IKNumLinks); m_OldJointRotations2D.resize(m_IKNumLinks); m_CurrentJointRotations2D.resize(m_IKNumLinks); m_TargetJointRotations2D.resize(m_IKNumLinks); // Initialize rotations for (size_t i = 0; i < m_OldJointRotations2D.size(); ++i) { m_OldJointRotations2D[i] = 0.f; m_CurrentJointRotations2D[i] = 0.f; m_TargetJointRotations2D[i] = 0.f; } m_OldJointRotations2D[0] = PI / 2.f; m_CurrentJointRotations2D[0] = PI / 2.f; m_TargetJointRotations2D[0] = PI / 2.f; // Initialize positions CalculateOldPosition2D(); CalculateCurrentPosition2D(); CalculateTargetPosition2D(); for (UINT i = 0; i < NumberOfBones; ++i) { file.Read(m_Bones[i].Name); file.Read(m_Bones[i].ParentBoneIndex); // Read the bind pose XMFLOAT3 T; file.Read(T); XMFLOAT4 R; file.Read(R); m_Bones[i].BindVQS = VQS(T, R, 1.0f); // Read the model to bone space VQS file.Read(T); file.Read(R); m_Bones[i].ModelToBoneSpaceVQS = VQS(T, R, 1.0f); } }
//-------------------------------------------------------------------------------- // @ ObjectController::GetVQS() //-------------------------------------------------------------------------------- // Get movement as a VQS structure //-------------------------------------------------------------------------------- VQS ObjectController::GetVQS(float dt) const { return VQS(Get_dp(dt), Get_do(dt), 1.0f); } //End: ObjectController::GetVQS()