void CameraZoomOut(KFbxScene* pScene, int dY) { KFbxCamera* lCamera = GetCurrentCamera(pScene); if (lCamera) { if (lCamera->ProjectionType.Get() == KFbxCamera::ePERSPECTIVE) { double lOriginalAperture = sqrt(lCamera->GetApertureWidth()); double lApertureTransform = lOriginalAperture+dY/400.0; if (lApertureTransform <0.25) { lApertureTransform =0.25; } if (lApertureTransform*lApertureTransform >179) { lApertureTransform = sqrt(179.0); } double lApertureH = lApertureTransform/lOriginalAperture*sqrt(lCamera->GetApertureHeight()); double lApertureWidthOrig = lCamera->GetApertureWidth(); double lApertureHeightOrig = lCamera->GetApertureHeight(); if (lCamera->GetApertureMode() == KFbxCamera::eFOCAL_LENGTH) { double lFLOrig = lCamera->FocalLength.Get(); double lFOVOrig = lCamera->ComputeFieldOfView(lFLOrig); // recompute to be sure. lCamera->SetApertureWidth(lApertureTransform * lApertureTransform); lCamera->SetApertureHeight(lApertureH * lApertureH); double lFLNew = lCamera->ComputeFocalLength(lFOVOrig); double lFOVNew = lCamera->ComputeFieldOfView(lFLNew); lCamera->FocalLength.Set(lFLNew); lCamera->FieldOfView.Set(lFOVNew); } else if (lCamera->GetApertureMode() == KFbxCamera::eVERTICAL || lCamera->GetApertureMode() == KFbxCamera::eHORIZONTAL) { double lFOVOrig = lCamera->FieldOfView.Get(); double lFLOrig = lCamera->ComputeFocalLength(lFOVOrig); // recompute to be sure. lCamera->SetApertureWidth(lApertureTransform * lApertureTransform); lCamera->SetApertureHeight(lApertureH * lApertureH); double lFOVNew = lCamera->ComputeFieldOfView(lFLOrig); double lFLNew = lCamera->ComputeFocalLength(lFOVNew); lCamera->FieldOfView.Set(lFOVNew); lCamera->FocalLength.Set(lFLNew); } else if (lCamera->GetApertureMode() == KFbxCamera::eHORIZONTAL_AND_VERTICAL) { double lFOVOrig = lCamera->FieldOfViewY.Get(); double lFLOrig = lCamera->ComputeFocalLength(lFOVOrig); // recompute to be sure. lCamera->SetApertureWidth(lApertureTransform * lApertureTransform); lCamera->SetApertureHeight(lApertureH * lApertureH); double lFOVNew = lCamera->ComputeFieldOfView(lFLOrig); double lFLNew = lCamera->ComputeFocalLength(lFOVNew); lCamera->FieldOfViewY.Set(lFOVNew); lCamera->FocalLength.Set(lFLNew); } lCamera->SetApertureWidth(lApertureWidthOrig); lCamera->SetApertureHeight(lApertureHeightOrig); } else { gsOrthoCameraScale *= 1.25; } } }