Matrix3 plMaxNodeBase::GetOTM(TimeValue t) { // objectTM = otm * nodeTM // otm = objectTM * Inverse(nodeTM) Matrix3 objectTM = GetObjectTM(t); Matrix3 nodeTM = GetNodeTM(t); Matrix3 otm = objectTM * Inverse(nodeTM); otm.ValidateFlags(); return otm; }
void SkinnedMeshNode::LinkToBone(Entity* pEntity) { assert(!m_vecBoneRef.empty()); D3DXMATRIX tmBoneWorldReferenceInv; size_t iBoneRef=0,nBoneRefSize =m_vecBoneRef.size() ; for (iBoneRef=0;iBoneRef<nBoneRefSize;iBoneRef++) { BONEREFINFO& refItem=m_vecBoneRef[iBoneRef]; refItem.pNode = pEntity->FindNode(refItem.strNodeName); assert(refItem.pNode!=NULL); // 찾지 못하는경우가 있어서는 안됨 블렌트 버택스에 boneIndex가 들어가있으므로 D3DXMatrixInverse(&tmBoneWorldReferenceInv,NULL,&refItem.pNode->GetNodeTM()); refItem.SkinOffset = GetNodeTM() * tmBoneWorldReferenceInv; // LocalTM = WorldTM * Parent.WorldTM.Inverse } }
void VNode::Display(bool flag) { return m_pMesh->Display(GetNodeTM(),flag); }