diff --git a/code/ASELoader.cpp b/code/ASELoader.cpp index 2669da568..b5aefad79 100644 --- a/code/ASELoader.cpp +++ b/code/ASELoader.cpp @@ -222,8 +222,8 @@ void ASEImporter::BuildAnimations() this->pcScene->mNumAnimations = 1; this->pcScene->mAnimations = new aiAnimation*[1]; aiAnimation* pcAnim = this->pcScene->mAnimations[0] = new aiAnimation(); - pcAnim->mNumBones = iNum; - pcAnim->mBones = new aiBoneAnim*[iNum]; + pcAnim->mNumChannels = iNum; + pcAnim->mChannels = new aiNodeAnim*[iNum]; pcAnim->mTicksPerSecond = this->mParser->iFrameSpeed * this->mParser->iTicksPerFrame; iNum = 0; @@ -233,36 +233,36 @@ void ASEImporter::BuildAnimations() if ((*i).bSkip)continue; if ((*i).mAnim.akeyPositions.size() > 1 || (*i).mAnim.akeyRotations.size() > 1) { - aiBoneAnim* pcBoneAnim = pcAnim->mBones[iNum++] = new aiBoneAnim(); - pcBoneAnim->mBoneName.Set((*i).mName); + aiNodeAnim* pcNodeAnim = pcAnim->mChannels[iNum++] = new aiNodeAnim(); + pcNodeAnim->mNodeName.Set((*i).mName); // copy position keys if ((*i).mAnim.akeyPositions.size() > 1 ) { - pcBoneAnim->mNumPositionKeys = (unsigned int) (*i).mAnim.akeyPositions.size(); - pcBoneAnim->mPositionKeys = new aiVectorKey[pcBoneAnim->mNumPositionKeys]; + pcNodeAnim->mNumPositionKeys = (unsigned int) (*i).mAnim.akeyPositions.size(); + pcNodeAnim->mPositionKeys = new aiVectorKey[pcNodeAnim->mNumPositionKeys]; - ::memcpy(pcBoneAnim->mPositionKeys,&(*i).mAnim.akeyPositions[0], - pcBoneAnim->mNumPositionKeys * sizeof(aiVectorKey)); + ::memcpy(pcNodeAnim->mPositionKeys,&(*i).mAnim.akeyPositions[0], + pcNodeAnim->mNumPositionKeys * sizeof(aiVectorKey)); - for (unsigned int qq = 0; qq < pcBoneAnim->mNumPositionKeys;++qq) + for (unsigned int qq = 0; qq < pcNodeAnim->mNumPositionKeys;++qq) { - double dTime = pcBoneAnim->mPositionKeys[qq].mTime; + double dTime = pcNodeAnim->mPositionKeys[qq].mTime; pcAnim->mDuration = std::max(pcAnim->mDuration,dTime); } } // copy rotation keys if ((*i).mAnim.akeyRotations.size() > 1 ) { - pcBoneAnim->mNumRotationKeys = (unsigned int) (*i).mAnim.akeyPositions.size(); - pcBoneAnim->mRotationKeys = new aiQuatKey[pcBoneAnim->mNumPositionKeys]; + pcNodeAnim->mNumRotationKeys = (unsigned int) (*i).mAnim.akeyPositions.size(); + pcNodeAnim->mRotationKeys = new aiQuatKey[pcNodeAnim->mNumPositionKeys]; - ::memcpy(pcBoneAnim->mRotationKeys,&(*i).mAnim.akeyRotations[0], - pcBoneAnim->mNumRotationKeys * sizeof(aiQuatKey)); + ::memcpy(pcNodeAnim->mRotationKeys,&(*i).mAnim.akeyRotations[0], + pcNodeAnim->mNumRotationKeys * sizeof(aiQuatKey)); - for (unsigned int qq = 0; qq < pcBoneAnim->mNumRotationKeys;++qq) + for (unsigned int qq = 0; qq < pcNodeAnim->mNumRotationKeys;++qq) { - double dTime = pcBoneAnim->mRotationKeys[qq].mTime; + double dTime = pcNodeAnim->mRotationKeys[qq].mTime; pcAnim->mDuration = std::max(pcAnim->mDuration,dTime); } } diff --git a/code/ConvertToLHProcess.cpp b/code/ConvertToLHProcess.cpp index 7ffc62b41..550f2802e 100644 --- a/code/ConvertToLHProcess.cpp +++ b/code/ConvertToLHProcess.cpp @@ -97,11 +97,11 @@ void ConvertToLHProcess::Execute( aiScene* pScene) for( unsigned int a = 0; a < pScene->mNumAnimations; a++) { aiAnimation* anim = pScene->mAnimations[a]; - for( unsigned int b = 0; b < anim->mNumBones; b++) + for( unsigned int b = 0; b < anim->mNumChannels; b++) { - aiBoneAnim* boneAnim = anim->mBones[b]; - if( strcmp( boneAnim->mBoneName.data, pScene->mRootNode->mName.data) == 0) - ProcessAnimation( boneAnim); + aiNodeAnim* nodeAnim = anim->mChannels[b]; + if( strcmp( nodeAnim->mNodeName.data, pScene->mRootNode->mName.data) == 0) + ProcessAnimation( nodeAnim); } } DefaultLogger::get()->debug("ConvertToLHProcess finished"); @@ -139,7 +139,7 @@ void ConvertToLHProcess::ProcessMesh( aiMesh* pMesh) // ------------------------------------------------------------------------------------------------ // Converts the given animation to LH coordinates. -void ConvertToLHProcess::ProcessAnimation( aiBoneAnim* pAnim) +void ConvertToLHProcess::ProcessAnimation( aiNodeAnim* pAnim) { // position keys for( unsigned int a = 0; a < pAnim->mNumPositionKeys; a++) diff --git a/code/ConvertToLHProcess.h b/code/ConvertToLHProcess.h index 69ff27e8c..696d430a5 100644 --- a/code/ConvertToLHProcess.h +++ b/code/ConvertToLHProcess.h @@ -46,7 +46,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "BaseProcess.h" struct aiMesh; -struct aiBoneAnim; +struct aiNodeAnim; namespace Assimp { @@ -114,7 +114,7 @@ protected: * work in local space and can therefore be left untouched. * @param pAnim The bone animation to transform */ - void ProcessAnimation( aiBoneAnim* pAnim); + void ProcessAnimation( aiNodeAnim* pAnim); //! true if the transformation matrix for the OGL-to-DX is //! directly used to transform all vertices. diff --git a/code/Importer.cpp b/code/Importer.cpp index 73dd70c25..58e666450 100644 --- a/code/Importer.cpp +++ b/code/Importer.cpp @@ -713,10 +713,10 @@ void Importer::GetMemoryRequirements(aiMemoryInfo& in) const in.animations += sizeof(aiAnimation); // add all bone anims - for (unsigned int a = 0; a < pc->mNumBones;++a) + for (unsigned int a = 0; a < pc->mNumChannels; ++a) { - const aiBoneAnim* pc2 = pc->mBones[i]; - in.animations += sizeof(aiBoneAnim); + const aiNodeAnim* pc2 = pc->mChannels[i]; + in.animations += sizeof(aiNodeAnim); in.animations += pc2->mNumPositionKeys * sizeof(aiVectorKey); in.animations += pc2->mNumScalingKeys * sizeof(aiVectorKey); in.animations += pc2->mNumRotationKeys * sizeof(aiQuatKey); diff --git a/code/MD5Loader.cpp b/code/MD5Loader.cpp index fa90b1501..68f0b8b46 100644 --- a/code/MD5Loader.cpp +++ b/code/MD5Loader.cpp @@ -470,17 +470,17 @@ void MD5Importer::LoadMD5AnimFile () pScene->mNumAnimations = 1; pScene->mAnimations = new aiAnimation*[1]; aiAnimation* anim = pScene->mAnimations[0] = new aiAnimation(); - anim->mNumBones = (unsigned int)animParser.mAnimatedBones.size(); - anim->mBones = new aiBoneAnim*[anim->mNumBones]; - for (unsigned int i = 0; i < anim->mNumBones;++i) + anim->mNumChannels = (unsigned int)animParser.mAnimatedBones.size(); + anim->mChannels = new aiNodeAnim*[anim->mNumChannels]; + for (unsigned int i = 0; i < anim->mNumChannels;++i) { - aiBoneAnim* bone = anim->mBones[i] = new aiBoneAnim(); - bone->mBoneName = aiString( animParser.mAnimatedBones[i].mName ); + aiNodeAnim* node = anim->mChannels[i] = new aiNodeAnim(); + node->mNodeName = aiString( animParser.mAnimatedBones[i].mName ); // allocate storage for the keyframes - bone->mNumPositionKeys = bone->mNumRotationKeys = (unsigned int)animParser.mFrames.size(); - bone->mPositionKeys = new aiVectorKey[bone->mNumPositionKeys]; - bone->mRotationKeys = new aiQuatKey[bone->mNumPositionKeys]; + node->mNumPositionKeys = node->mNumRotationKeys = (unsigned int)animParser.mFrames.size(); + node->mPositionKeys = new aiVectorKey[node->mNumPositionKeys]; + node->mRotationKeys = new aiQuatKey[node->mNumPositionKeys]; } // 1 tick == 1 frame @@ -493,12 +493,12 @@ void MD5Importer::LoadMD5AnimFile () if (!(*iter).mValues.empty()) { // now process all values in there ... read all joints - aiBoneAnim** pcAnimBone = anim->mBones; + aiNodeAnim** pcAnimNode = anim->mChannels; MD5::BaseFrameDesc* pcBaseFrame = &animParser.mBaseFrames[0]; for (AnimBoneList::const_iterator iter2 = animParser.mAnimatedBones.begin(), iterEnd2 = animParser.mAnimatedBones.end(); - iter2 != iterEnd2;++iter2,++pcAnimBone,++pcBaseFrame) + iter2 != iterEnd2;++iter2,++pcAnimNode,++pcBaseFrame) { if((*iter2).iFirstKeyIndex >= (*iter).mValues.size()) { @@ -508,7 +508,7 @@ void MD5Importer::LoadMD5AnimFile () } const float* fpCur = &(*iter).mValues[(*iter2).iFirstKeyIndex]; - aiBoneAnim* pcCurAnimBone = *pcAnimBone; + aiNodeAnim* pcCurAnimBone = *pcAnimNode; aiVectorKey* vKey = pcCurAnimBone->mPositionKeys++; // translation on the x axis @@ -557,11 +557,11 @@ void MD5Importer::LoadMD5AnimFile () } // undo our offset computations - for (unsigned int i = 0; i < anim->mNumBones;++i) + for (unsigned int i = 0; i < anim->mNumChannels;++i) { - aiBoneAnim* bone = anim->mBones[i]; - bone->mPositionKeys -= bone->mNumPositionKeys; - bone->mRotationKeys -= bone->mNumPositionKeys; + aiNodeAnim* node = anim->mChannels[i]; + node->mPositionKeys -= node->mNumPositionKeys; + node->mRotationKeys -= node->mNumPositionKeys; } } diff --git a/code/MDLLoader.cpp b/code/MDLLoader.cpp index 96fbaf413..abeabe15c 100644 --- a/code/MDLLoader.cpp +++ b/code/MDLLoader.cpp @@ -1734,12 +1734,12 @@ void MDLImporter::BuildOutputAnims_3DGS_MDL7( pcAnim->mDuration = std::max(pcAnim->mDuration, (double) apcBonesOut[i]->pkeyPositions[qq].mTime); } - ++pcAnim->mNumBones; + ++pcAnim->mNumChannels; } } if (pcAnim->mDuration) { - pcAnim->mBones = new aiBoneAnim*[pcAnim->mNumBones]; + pcAnim->mChannels = new aiNodeAnim*[pcAnim->mNumChannels]; unsigned int iCnt = 0; for (uint32_t i = 0; i < pcHeader->bones_num;++i) @@ -1748,24 +1748,24 @@ void MDLImporter::BuildOutputAnims_3DGS_MDL7( { const MDL::IntBone_MDL7* const intBone = apcBonesOut[i]; - aiBoneAnim* const pcBoneAnim = pcAnim->mBones[iCnt++] = new aiBoneAnim(); - pcBoneAnim->mBoneName = aiString( intBone->mName ); + aiNodeAnim* const pcNodeAnim = pcAnim->mChannels[iCnt++] = new aiNodeAnim(); + pcNodeAnim->mNodeName = aiString( intBone->mName ); // allocate enough storage for all keys - pcBoneAnim->mNumPositionKeys = (unsigned int)intBone->pkeyPositions.size(); - pcBoneAnim->mNumScalingKeys = (unsigned int)intBone->pkeyPositions.size(); - pcBoneAnim->mNumRotationKeys = (unsigned int)intBone->pkeyPositions.size(); + pcNodeAnim->mNumPositionKeys = (unsigned int)intBone->pkeyPositions.size(); + pcNodeAnim->mNumScalingKeys = (unsigned int)intBone->pkeyPositions.size(); + pcNodeAnim->mNumRotationKeys = (unsigned int)intBone->pkeyPositions.size(); - pcBoneAnim->mPositionKeys = new aiVectorKey[pcBoneAnim->mNumPositionKeys]; - pcBoneAnim->mScalingKeys = new aiVectorKey[pcBoneAnim->mNumPositionKeys]; - pcBoneAnim->mRotationKeys = new aiQuatKey[pcBoneAnim->mNumPositionKeys]; + pcNodeAnim->mPositionKeys = new aiVectorKey[pcNodeAnim->mNumPositionKeys]; + pcNodeAnim->mScalingKeys = new aiVectorKey[pcNodeAnim->mNumPositionKeys]; + pcNodeAnim->mRotationKeys = new aiQuatKey[pcNodeAnim->mNumPositionKeys]; // copy all keys - for (unsigned int qq = 0; qq < pcBoneAnim->mNumPositionKeys;++qq) + for (unsigned int qq = 0; qq < pcNodeAnim->mNumPositionKeys;++qq) { - pcBoneAnim->mPositionKeys[qq] = intBone->pkeyPositions[qq]; - pcBoneAnim->mScalingKeys[qq] = intBone->pkeyScalings[qq]; - pcBoneAnim->mRotationKeys[qq] = intBone->pkeyRotations[qq]; + pcNodeAnim->mPositionKeys[qq] = intBone->pkeyPositions[qq]; + pcNodeAnim->mScalingKeys[qq] = intBone->pkeyScalings[qq]; + pcNodeAnim->mRotationKeys[qq] = intBone->pkeyRotations[qq]; } } } diff --git a/code/OptimizeGraphProcess.cpp b/code/OptimizeGraphProcess.cpp index 52338c3c2..a2bde7dd4 100644 --- a/code/OptimizeGraphProcess.cpp +++ b/code/OptimizeGraphProcess.cpp @@ -176,10 +176,10 @@ void OptimizeGraphProcess::FindLockedNodes(aiNode* node) for (unsigned int i = 0; i < pScene->mNumAnimations;++i) { aiAnimation* pani = pScene->mAnimations[i]; - for (unsigned int a = 0; a < pani->mNumBones;++a) + for (unsigned int a = 0; a < pani->mNumChannels;++a) { - aiBoneAnim* pba = pani->mBones[a]; - if (pba->mBoneName == node->mName) + aiNodeAnim* pba = pani->mChannels[a]; + if (pba->mNodeName == node->mName) { // this node is locked node->mNumChildren |= AI_OG_UINT_MSB; diff --git a/code/RawLoader.cpp b/code/RawLoader.cpp index fbac0073a..40baa1592 100644 --- a/code/RawLoader.cpp +++ b/code/RawLoader.cpp @@ -42,7 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** @file Implementation of the RAW importer class */ // internal headers -#include "RAWLoader.h" +#include "RawLoader.h" #include "MaterialSystem.h" #include "ParsingUtils.h" #include "fast_atof.h" diff --git a/code/SMDLoader.cpp b/code/SMDLoader.cpp index 62bb0b979..ecf7ac583 100644 --- a/code/SMDLoader.cpp +++ b/code/SMDLoader.cpp @@ -535,10 +535,10 @@ void SMDImporter::CreateOutputAnimations() aiAnimation*& anim = this->pScene->mAnimations[0] = new aiAnimation(); anim->mDuration = this->dLengthOfAnim; - anim->mNumBones = iNumBones; + anim->mNumChannels = iNumBones; anim->mTicksPerSecond = 25.0; // FIXME: is this correct? - aiBoneAnim** pp = anim->mBones = new aiBoneAnim*[anim->mNumBones]; + aiNodeAnim** pp = anim->mChannels = new aiNodeAnim*[anim->mNumChannels]; // now build valid keys unsigned int a = 0; @@ -548,12 +548,10 @@ void SMDImporter::CreateOutputAnimations() { if (!(*i).bIsUsed)continue; - aiBoneAnim* p = pp[a] = new aiBoneAnim(); + aiNodeAnim* p = pp[a] = new aiNodeAnim(); // copy the name of the bone - p->mBoneName.length = (*i).mName.length(); - ::memcpy(p->mBoneName.data,(*i).mName.c_str(),p->mBoneName.length); - p->mBoneName.data[p->mBoneName.length] = '\0'; + p->mNodeName.Set( i->mName); p->mNumRotationKeys = (unsigned int) (*i).sAnim.asKeys.size(); if (p->mNumRotationKeys) diff --git a/code/ValidateDataStructure.cpp b/code/ValidateDataStructure.cpp index 0a811bd8f..b296fce16 100644 --- a/code/ValidateDataStructure.cpp +++ b/code/ValidateDataStructure.cpp @@ -418,24 +418,24 @@ void ValidateDSProcess::Validate( const aiAnimation* pAnimation) this->Validate(&pAnimation->mName); // validate all materials - if (pAnimation->mNumBones) + if (pAnimation->mNumChannels) { - if (!pAnimation->mBones) + if (!pAnimation->mChannels) { - this->ReportError("aiAnimation::mBones is NULL (aiAnimation::mNumBones is %i)", - pAnimation->mBones); + this->ReportError("aiAnimation::mChannels is NULL (aiAnimation::mNumChannels is %i)", + pAnimation->mNumChannels); } - for (unsigned int i = 0; i < pAnimation->mNumBones;++i) + for (unsigned int i = 0; i < pAnimation->mNumChannels;++i) { - if (!pAnimation->mBones[i]) + if (!pAnimation->mChannels[i]) { - this->ReportError("aiAnimation::mBones[%i] is NULL (aiAnimation::mNumBones is %i)", - i,pAnimation->mNumBones); + this->ReportError("aiAnimation::mChannels[%i] is NULL (aiAnimation::mNumChannels is %i)", + i, pAnimation->mNumChannels); } - this->Validate(pAnimation, pAnimation->mBones[i]); + this->Validate(pAnimation, pAnimation->mChannels[i]); } } - else this->ReportError("aiAnimation::mNumBones is 0. At least one bone animation channel must be there."); + else this->ReportError("aiAnimation::mNumChannels is 0. At least one node animation channel must be there."); // Animation duration is allowed to be zero in cases where the anim contains only a single key frame. // if (!pAnimation->mDuration)this->ReportError("aiAnimation::mDuration is zero"); @@ -653,9 +653,9 @@ void ValidateDSProcess::Validate( const aiTexture* pTexture) } // ------------------------------------------------------------------------------------------------ void ValidateDSProcess::Validate( const aiAnimation* pAnimation, - const aiBoneAnim* pBoneAnim) + const aiNodeAnim* pNodeAnim) { - this->Validate(&pBoneAnim->mBoneName); + this->Validate(&pNodeAnim->mNodeName); #if 0 // check whether there is a bone with this name ... @@ -665,103 +665,103 @@ void ValidateDSProcess::Validate( const aiAnimation* pAnimation, aiMesh* mesh = this->mScene->mMeshes[i]; for (unsigned int a = 0; a < mesh->mNumBones;++a) { - if (mesh->mBones[a]->mName == pBoneAnim->mBoneName) + if (mesh->mBones[a]->mName == pNodeAnim->mBoneName) goto __break_out; } } __break_out: if (i == this->mScene->mNumMeshes) { - this->ReportWarning("aiBoneAnim::mBoneName is \"%s\". However, no bone with this name was found", - pBoneAnim->mBoneName.data); + this->ReportWarning("aiNodeAnim::mBoneName is \"%s\". However, no bone with this name was found", + pNodeAnim->mBoneName.data); } - if (!pBoneAnim->mNumPositionKeys && !pBoneAnim->mNumRotationKeys && !pBoneAnim->mNumScalingKeys) + if (!pNodeAnim->mNumPositionKeys && !pNodeAnim->mNumRotationKeys && !pNodeAnim->mNumScalingKeys) { this->ReportWarning("A bone animation channel has no keys"); } #endif // otherwise check whether one of the keys exceeds the total duration of the animation - if (pBoneAnim->mNumPositionKeys) + if (pNodeAnim->mNumPositionKeys) { - if (!pBoneAnim->mPositionKeys) + if (!pNodeAnim->mPositionKeys) { - this->ReportError("aiBoneAnim::mPositionKeys is NULL (aiBoneAnim::mNumPositionKeys is %i)", - pBoneAnim->mNumPositionKeys); + this->ReportError("aiNodeAnim::mPositionKeys is NULL (aiNodeAnim::mNumPositionKeys is %i)", + pNodeAnim->mNumPositionKeys); } double dLast = -0.1; - for (unsigned int i = 0; i < pBoneAnim->mNumPositionKeys;++i) + for (unsigned int i = 0; i < pNodeAnim->mNumPositionKeys;++i) { - if (pBoneAnim->mPositionKeys[i].mTime > pAnimation->mDuration) + if (pNodeAnim->mPositionKeys[i].mTime > pAnimation->mDuration) { - this->ReportError("aiBoneAnim::mPositionKeys[%i].mTime (%.5f) is larger " + this->ReportError("aiNodeAnim::mPositionKeys[%i].mTime (%.5f) is larger " "than aiAnimation::mDuration (which is %.5f)",i, - (float)pBoneAnim->mPositionKeys[i].mTime, + (float)pNodeAnim->mPositionKeys[i].mTime, (float)pAnimation->mDuration); } - if (pBoneAnim->mPositionKeys[i].mTime <= dLast) + if (pNodeAnim->mPositionKeys[i].mTime <= dLast) { - this->ReportWarning("aiBoneAnim::mPositionKeys[%i].mTime (%.5f) is smaller " + this->ReportWarning("aiNodeAnim::mPositionKeys[%i].mTime (%.5f) is smaller " "than aiAnimation::mPositionKeys[%i] (which is %.5f)",i, - (float)pBoneAnim->mPositionKeys[i].mTime, + (float)pNodeAnim->mPositionKeys[i].mTime, i-1, (float)dLast); } - dLast = pBoneAnim->mPositionKeys[i].mTime; + dLast = pNodeAnim->mPositionKeys[i].mTime; } } // rotation keys - if (pBoneAnim->mNumRotationKeys) + if (pNodeAnim->mNumRotationKeys) { - if (!pBoneAnim->mRotationKeys) + if (!pNodeAnim->mRotationKeys) { - this->ReportError("aiBoneAnim::mRotationKeys is NULL (aiBoneAnim::mNumRotationKeys is %i)", - pBoneAnim->mNumRotationKeys); + this->ReportError("aiNodeAnim::mRotationKeys is NULL (aiNodeAnim::mNumRotationKeys is %i)", + pNodeAnim->mNumRotationKeys); } double dLast = -0.1; - for (unsigned int i = 0; i < pBoneAnim->mNumRotationKeys;++i) + for (unsigned int i = 0; i < pNodeAnim->mNumRotationKeys;++i) { - if (pBoneAnim->mRotationKeys[i].mTime > pAnimation->mDuration) + if (pNodeAnim->mRotationKeys[i].mTime > pAnimation->mDuration) { - this->ReportError("aiBoneAnim::mRotationKeys[%i].mTime (%.5f) is larger " + this->ReportError("aiNodeAnim::mRotationKeys[%i].mTime (%.5f) is larger " "than aiAnimation::mDuration (which is %.5f)",i, - (float)pBoneAnim->mRotationKeys[i].mTime, + (float)pNodeAnim->mRotationKeys[i].mTime, (float)pAnimation->mDuration); } - if (pBoneAnim->mRotationKeys[i].mTime <= dLast) + if (pNodeAnim->mRotationKeys[i].mTime <= dLast) { - this->ReportWarning("aiBoneAnim::mRotationKeys[%i].mTime (%.5f) is smaller " + this->ReportWarning("aiNodeAnim::mRotationKeys[%i].mTime (%.5f) is smaller " "than aiAnimation::mRotationKeys[%i] (which is %.5f)",i, - (float)pBoneAnim->mRotationKeys[i].mTime, + (float)pNodeAnim->mRotationKeys[i].mTime, i-1, (float)dLast); } - dLast = pBoneAnim->mRotationKeys[i].mTime; + dLast = pNodeAnim->mRotationKeys[i].mTime; } } // scaling keys - if (pBoneAnim->mNumScalingKeys) + if (pNodeAnim->mNumScalingKeys) { - if (!pBoneAnim->mScalingKeys) + if (!pNodeAnim->mScalingKeys) { - this->ReportError("aiBoneAnim::mScalingKeys is NULL (aiBoneAnim::mNumScalingKeys is %i)", - pBoneAnim->mNumScalingKeys); + this->ReportError("aiNodeAnim::mScalingKeys is NULL (aiNodeAnim::mNumScalingKeys is %i)", + pNodeAnim->mNumScalingKeys); } double dLast = -0.1; - for (unsigned int i = 0; i < pBoneAnim->mNumScalingKeys;++i) + for (unsigned int i = 0; i < pNodeAnim->mNumScalingKeys;++i) { - if (pBoneAnim->mScalingKeys[i].mTime > pAnimation->mDuration) + if (pNodeAnim->mScalingKeys[i].mTime > pAnimation->mDuration) { - this->ReportError("aiBoneAnim::mScalingKeys[%i].mTime (%.5f) is larger " + this->ReportError("aiNodeAnim::mScalingKeys[%i].mTime (%.5f) is larger " "than aiAnimation::mDuration (which is %.5f)",i, - (float)pBoneAnim->mScalingKeys[i].mTime, + (float)pNodeAnim->mScalingKeys[i].mTime, (float)pAnimation->mDuration); } - if (pBoneAnim->mScalingKeys[i].mTime <= dLast) + if (pNodeAnim->mScalingKeys[i].mTime <= dLast) { - this->ReportWarning("aiBoneAnim::mScalingKeys[%i].mTime (%.5f) is smaller " + this->ReportWarning("aiNodeAnim::mScalingKeys[%i].mTime (%.5f) is smaller " "than aiAnimation::mScalingKeys[%i] (which is %.5f)",i, - (float)pBoneAnim->mScalingKeys[i].mTime, + (float)pNodeAnim->mScalingKeys[i].mTime, i-1, (float)dLast); } - dLast = pBoneAnim->mScalingKeys[i].mTime; + dLast = pNodeAnim->mScalingKeys[i].mTime; } } } diff --git a/code/ValidateDataStructure.h b/code/ValidateDataStructure.h index a9a6e78b8..342ffb5e9 100644 --- a/code/ValidateDataStructure.h +++ b/code/ValidateDataStructure.h @@ -50,7 +50,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct aiBone; struct aiMesh; struct aiAnimation; -struct aiBoneAnim; +struct aiNodeAnim; struct aiTexture; struct aiMaterial; struct aiNode; @@ -152,7 +152,7 @@ protected: * @param pBoneAnim Input bone animation */ void Validate( const aiAnimation* pAnimation, - const aiBoneAnim* pBoneAnim); + const aiNodeAnim* pBoneAnim); // ------------------------------------------------------------------- /** Validates a node and all of its subnodes diff --git a/code/XFileImporter.cpp b/code/XFileImporter.cpp index cf9db9beb..e2dd68887 100644 --- a/code/XFileImporter.cpp +++ b/code/XFileImporter.cpp @@ -420,15 +420,15 @@ void XFileImporter::CreateAnimations( aiScene* pScene, const XFile::Scene* pData // duration will be determined by the maximum length nanim->mDuration = 0; nanim->mTicksPerSecond = pData->mAnimTicksPerSecond; - nanim->mNumBones = (unsigned int)anim->mAnims.size(); - nanim->mBones = new aiBoneAnim*[nanim->mNumBones]; + nanim->mNumChannels = (unsigned int)anim->mAnims.size(); + nanim->mChannels = new aiNodeAnim*[nanim->mNumChannels]; for( unsigned int b = 0; b < anim->mAnims.size(); b++) { const XFile::AnimBone* bone = anim->mAnims[b]; - aiBoneAnim* nbone = new aiBoneAnim; - nbone->mBoneName.Set( bone->mBoneName); - nanim->mBones[b] = nbone; + aiNodeAnim* nbone = new aiNodeAnim; + nbone->mNodeName.Set( bone->mBoneName); + nanim->mChannels[b] = nbone; // apply the LH->RH conversion if the animation affects the root bone bool isRootAnim = (bone->mBoneName == pScene->mRootNode->mName.data); diff --git a/include/aiAnim.h b/include/aiAnim.h index fc8c3b47c..979045143 100644 --- a/include/aiAnim.h +++ b/include/aiAnim.h @@ -69,14 +69,11 @@ struct aiQuatKey /** Describes the animation of a single node. The name specifies the bone/node which is affected by this * animation channel. The keyframes are given in three separate series of values, one each for * position, rotation and scaling. - *
- * NOTE: The name "BoneAnim" is misleading. This structure is also used to describe - * the animation of regular nodes on the node graph. They needn't be nodes. */ -struct aiBoneAnim +struct aiNodeAnim { - /** The name of the bone affected by this animation. */ - C_STRUCT aiString mBoneName; + /** The name of the node affected by this animation. */ + C_STRUCT aiString mNodeName; /** The number of position keys */ unsigned int mNumPositionKeys; @@ -100,14 +97,14 @@ struct aiBoneAnim C_STRUCT aiVectorKey* mScalingKeys; #ifdef __cplusplus - aiBoneAnim() + aiNodeAnim() { mNumPositionKeys = 0; mPositionKeys = NULL; mNumRotationKeys= 0; mRotationKeys = NULL; mNumScalingKeys = 0; mScalingKeys = NULL; } - ~aiBoneAnim() + ~aiNodeAnim() { if (mNumPositionKeys) delete [] mPositionKeys; @@ -119,7 +116,7 @@ struct aiBoneAnim #endif // __cplusplus }; -/** An animation consists of keyframe data for a number of bones. For each bone affected by the animation +/** An animation consists of keyframe data for a number of nodes. For each node affected by the animation * a separate series of data is given. */ struct aiAnimation @@ -134,28 +131,28 @@ struct aiAnimation /** Ticks per second. 0 if not specified in the imported file */ double mTicksPerSecond; - /** The number of bone animation channels. Each channel affects a single bone. */ - unsigned int mNumBones; - /** The bone animation channels. Each channel affects a single bone. The array - * is mNumBones in size. + /** The number of bone animation channels. Each channel affects a single node. */ + unsigned int mNumChannels; + /** The node animation channels. Each channel affects a single node. The array + * is mNumChannels in size. */ - C_STRUCT aiBoneAnim** mBones; + C_STRUCT aiNodeAnim** mChannels; #ifdef __cplusplus aiAnimation() { mDuration = 0; mTicksPerSecond = 0; - mNumBones = 0; mBones = NULL; + mNumChannels = 0; mChannels = NULL; } ~aiAnimation() { - if (mNumBones) + if (mNumChannels) { - for( unsigned int a = 0; a < mNumBones; a++) - delete mBones[a]; - delete [] mBones; + for( unsigned int a = 0; a < mNumChannels; a++) + delete mChannels[a]; + delete [] mChannels; } } #endif // __cplusplus diff --git a/port/jAssimp/jni_bridge/JNIBoneAnim.cpp b/port/jAssimp/jni_bridge/JNIBoneAnim.cpp index 4afdd4e62..bbdeffbbf 100644 --- a/port/jAssimp/jni_bridge/JNIBoneAnim.cpp +++ b/port/jAssimp/jni_bridge/JNIBoneAnim.cpp @@ -45,7 +45,7 @@ void JNIEnvironment::_assimp::_BoneAnim::Initialize() JNIEnvironment::Get()->ThrowNativeError("Unable to load all fields of class assimp.BoneAnim"); } // ------------------------------------------------------------------------------------------------ -void JNIEnvironment::_assimp::_BoneAnim::Fill(jobject obj,const aiBoneAnim* pcSrc) +void JNIEnvironment::_assimp::_BoneAnim::Fill(jobject obj,const aiNodeAnim* pcSrc) { JNIEnv* pc = JNIEnvironment::Get()->GetThread()->m_pcEnv; diff --git a/port/jAssimp/jni_bridge/JNIEnvironment.h b/port/jAssimp/jni_bridge/JNIEnvironment.h index 8b2fe6889..b3a649c66 100644 --- a/port/jAssimp/jni_bridge/JNIEnvironment.h +++ b/port/jAssimp/jni_bridge/JNIEnvironment.h @@ -335,7 +335,7 @@ public: struct _BoneAnim : public _Base { void Initialize(); - AIJ_SET_INPUT_TYPE(aiBoneAnim); + AIJ_SET_INPUT_TYPE(aiNodeAnim); //! Represents the JNI interface to class assimp.BoneAnim.KeyFrame struct _KeyFrame