void animateArmature(MArmature * armature, MArmatureAnim * armatureAnim, float t) { MObject3dAnim * bonesAnim = armatureAnim->getBonesAnim(); MVector3 position; MVector3 scale; MQuaternion rotation; unsigned int b; unsigned int bSize = armatureAnim->getBonesAnimNumber(); for (b = 0; b < bSize; b++) { MOBone * bone = armature->getBone(b); // position if(animateVector3(bonesAnim->getPositionKeys(), bonesAnim->getPositionKeysNumber(), t, &position)) bone->setPosition(position); // scale if(animateVector3(bonesAnim->getScaleKeys(), bonesAnim->getScaleKeysNumber(), t, &scale)) bone->setScale(scale); // rotation if(animateQuaternion(bonesAnim->getRotationKeys(), bonesAnim->getRotationKeysNumber(), t, &rotation)) bone->setRotation(rotation); bonesAnim++; } armature->processBonesLinking(); armature->updateBonesSkinMatrix(); }
void animateMaterials(MMesh * mesh, MMaterialsAnim * materialsAnim, float t) { M_PROFILE_SCOPE(animateMaterials); MMaterialAnim * matAnim = materialsAnim->getMaterialsAnim(); float opacity; float shininess; float customValue; MVector3 diffuse; MVector3 specular; MVector3 emit; MVector3 customColor; unsigned int m; unsigned int mSize = materialsAnim->getMaterialsAnimNumber(); for (m = 0; m < mSize; m++) { MMaterial * material = mesh->getMaterial(m); // opacity if(animateFloat(matAnim->getOpacityKeys(), matAnim->getOpacityKeysNumber(), t, &opacity)) material->setOpacity(opacity); // shininess if(animateFloat(matAnim->getShininessKeys(), matAnim->getShininessKeysNumber(), t, &shininess)) material->setShininess(shininess); // customValue if(animateFloat(matAnim->getCustomValueKeys(), matAnim->getCustomValueKeysNumber(), t, &customValue)) material->setCustomValue(customValue); // diffuse if(animateVector3(matAnim->getDiffuseKeys(), matAnim->getDiffuseKeysNumber(), t, &diffuse)) material->setDiffuse(diffuse); // specular if(animateVector3(matAnim->getSpecularKeys(), matAnim->getSpecularKeysNumber(), t, &specular)) material->setSpecular(specular); // emit if(animateVector3(matAnim->getEmitKeys(), matAnim->getEmitKeysNumber(), t, &emit)) material->setEmit(emit); // customColor if(animateVector3(matAnim->getCustomColorKeys(), matAnim->getCustomColorKeysNumber(), t, &customColor)) material->setCustomColor(customColor); matAnim++; } }