Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "skinning.h"
- void skinnedObject::Update()
- {
- for(U32 bone=0;bone<sMatrices.size();bone++)
- {
- sMatrices[bone] = sPoseMatrices[bone] * (*sBones[bone]->GetWorldFull());
- }
- for(U8 i=0;i<nulledBoneIDs.size();i++)
- {
- U32 bone = nulledBoneIDs[i];
- float4 scl = sBones[bone]->transform.GetScl();
- sBones[bone]->transform.SetScl(float4::Zero);
- sMatrices[bone] = sPoseMatrices[bone] * (*sBones[bone]->GetWorldFull());
- sBones[bone]->transform.SetScl(scl);
- }
- }
- void skinnedObject::Create(const char* fname,entityCompound& e,FXShader* shd)
- {
- mfile f;
- IFS->Load(f,fname);
- U32 numBones = f.ReadElem<U32>();
- sMatrices.reserve(numBones);
- sPoseMatrices.reserve(numBones);
- sBones.reserve(numBones);
- /*bool bMode = false;
- for(U32 i=0;i<e.GetNumEntities();i++)
- {
- if (e.GetNode(i)->GetName().c_str() == string("klev_src01")) bMode = true;
- }*/
- for(U32 bone=0;bone<numBones;bone++)
- {
- sMatrices.push_back_empty();
- sPoseMatrices.push_back_empty();
- sBones.push_back_empty();
- string name = f.ReadString();
- sBones[bone] = e.FindGeom(name.c_str());
- sBones[bone]->GetWorldFull()->Inverse(sPoseMatrices[bone]);
- sPoseMatrices[bone] = (*e.FindGeom("base")->GetWorldFull()) * sPoseMatrices[bone];
- }
- shd->Set("worldMatrixArray",&sMatrices[0],numBones);
- nulledBoneIDs.reserve(1);
- }
- void skinnedObject::NullBone(sceneNode* n)
- {
- for(U32 bone=0;bone<sMatrices.size();bone++)
- {
- if (sBones[bone]==n)
- {
- nulledBoneIDs.push_back(bone);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement