2004-05-30 02:46:58 +02:00
|
|
|
#include "PSProp.h"
|
|
|
|
#include "ExpProp.h"
|
|
|
|
#include "ExpUtil.h"
|
|
|
|
#include "decomp.h"
|
|
|
|
|
|
|
|
PMDExpProp::PMDExpProp(INode* node) : m_Node(node)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
bool PMDExpProp::IsProp(Object* obj)
|
|
|
|
{
|
|
|
|
return obj->ClassID()==PSPROP_CLASS_ID ? true : false;
|
|
|
|
}
|
|
|
|
|
|
|
|
ExpProp* PMDExpProp::Build()
|
|
|
|
{
|
|
|
|
ExpProp* prop=new ExpProp;
|
|
|
|
prop->m_Name=m_Node->GetName();
|
|
|
|
prop->m_Parent=m_Node->GetParentNode();
|
|
|
|
|
|
|
|
// build local transformation matrix
|
|
|
|
INode *parent;
|
|
|
|
Matrix3 parentTM, nodeTM, localTM;
|
|
|
|
nodeTM = m_Node->GetNodeTM(0);
|
|
|
|
parent = m_Node->GetParentNode();
|
|
|
|
parentTM = parent->GetNodeTM(0);
|
|
|
|
localTM = nodeTM*Inverse(parentTM);
|
|
|
|
|
|
|
|
// decompose it to get translation and rotation
|
|
|
|
AffineParts parts;
|
|
|
|
decomp_affine(localTM,&parts);
|
|
|
|
|
|
|
|
// get translation from affine parts
|
|
|
|
MAXtoGL(parts.t);
|
|
|
|
prop->m_Position=CVector3D(parts.t.x,parts.t.y,parts.t.z);
|
|
|
|
|
|
|
|
// get rotation from affine parts
|
|
|
|
prop->m_Rotation.m_V.X=parts.q.x;
|
|
|
|
prop->m_Rotation.m_V.Y=parts.q.z;
|
|
|
|
prop->m_Rotation.m_V.Z=parts.q.y;
|
|
|
|
prop->m_Rotation.m_W=parts.q.w;
|
|
|
|
|
|
|
|
return prop;
|
2004-05-29 23:10:50 +02:00
|
|
|
}
|