#include "stdafx.h" #include "BoneObject.h" BoneObject::BoneObject(BaseMaterial* pMaterial, float length) : m_pMaterial{ pMaterial } , m_Length{ length } { } void BoneObject::Initialize(const SceneContext& /*gameContext*/) { GameObject* pEmpty = new GameObject(); AddChild(pEmpty); ModelComponent* pModel = new ModelComponent(L"Meshes/Bone.ovm"); pModel->SetMaterial(m_pMaterial); pEmpty->AddComponent(pModel); pEmpty->GetTransform()->Rotate(0, -90.f, 0); pEmpty->GetTransform()->Scale(m_Length); } void BoneObject::AddBone(BoneObject* pBone) { pBone->GetTransform()->Translate(m_Length, 0, 0); AddChild(pBone); } void BoneObject::CalculateBindPose() { const DirectX::XMMATRIX world = XMLoadFloat4x4(&GetTransform()->GetWorld()); const DirectX::XMMATRIX worldInv = XMMatrixInverse(nullptr, world); XMStoreFloat4x4(&m_BindPose, worldInv); std::vector childBones = GetChildren(); for (BoneObject* pBone : childBones) { pBone->CalculateBindPose(); } }