Пример #1
0
    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);
        }
    }
Пример #2
0
//--------------------------------------------------------------------------------
//	@	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()