// Get the animated parameters of a camera contained in the scene // and store them in the associated member variables contained in // the camera. void GetCameraAnimatedParameters(FbxNode* pNode, FbxTime& pTime, FbxAnimLayer* pAnimLayer) { FbxCamera* lCamera = (FbxCamera*) pNode->GetNodeAttribute(); lCamera->Position.Set(GetGlobalPosition(pNode, pTime).GetT()); FbxAnimCurve* fc = lCamera->Roll.GetCurve(pAnimLayer); if (fc) lCamera->Roll.Set(fc->Evaluate(pTime)); FbxCamera::EApertureMode lCameraApertureMode = lCamera->GetApertureMode(); if (lCameraApertureMode == FbxCamera::eHorizontal || lCameraApertureMode == FbxCamera::eVertical) { double lFieldOfView = lCamera->FieldOfView.Get(); fc = lCamera->FieldOfView.GetCurve(pAnimLayer); if (fc) lFieldOfView = fc->Evaluate(pTime); //update FOV and focal length lCamera->FieldOfView.Set( lFieldOfView); lCamera->FocalLength.Set( lCamera->ComputeFocalLength( lFieldOfView)); } else if ( lCameraApertureMode == FbxCamera::eHorizAndVert) { double lOldFieldOfViewX = lCamera->FieldOfViewX.Get(); double lOldFieldOfViewY = lCamera->FieldOfViewY.Get(); //update FOV double lNewFieldOfViewX = lOldFieldOfViewX; double lNewFieldOfViewY = lOldFieldOfViewY; fc = lCamera->FieldOfViewX.GetCurve(pAnimLayer); if (fc) lNewFieldOfViewX = fc->Evaluate(pTime); fc = lCamera->FieldOfViewY.GetCurve(pAnimLayer); if (fc) lNewFieldOfViewY = fc->Evaluate(pTime); lCamera->FieldOfViewX.Set(lNewFieldOfViewX); lCamera->FieldOfViewY.Set(lNewFieldOfViewY); //update aspect double lUpdatedApertureX = lCamera->GetApertureWidth(); double lUpdatedApertureY = lCamera->GetApertureHeight(); lUpdatedApertureX *= tan( lNewFieldOfViewX * 0.5 * FBXSDK_PI_DIV_180) / tan( lOldFieldOfViewX * 0.5 * FBXSDK_PI_DIV_180); lUpdatedApertureY *= tan( lNewFieldOfViewY * 0.5 * FBXSDK_PI_DIV_180) / tan( lOldFieldOfViewY * 0.5 * FBXSDK_PI_DIV_180); lCamera->FilmWidth.Set( lUpdatedApertureX); lCamera->FilmHeight.Set( lUpdatedApertureY); lCamera->FilmAspectRatio.Set( lUpdatedApertureX / lUpdatedApertureY); } else if ( lCameraApertureMode == FbxCamera::eFocalLength) { double lFocalLength = lCamera->FocalLength.Get(); fc = lCamera->FocalLength.GetCurve(pAnimLayer); if (fc && fc ->Evaluate(pTime)) lFocalLength = fc->Evaluate( pTime); //update FOV and focal length lCamera->FocalLength.Set( lFocalLength); lCamera->FieldOfView.Set( lCamera->ComputeFieldOfView( lFocalLength)); } }