KFbxCamera* GetCurrentCamera(KFbxScene* pScene, KTime& pTime, KArrayTemplate<KFbxNode*>& pCameraArray) { KFbxGlobalSettings& lGlobalSettings = pScene->GetGlobalSettings(); KFbxGlobalCameraSettings& lGlobalCameraSettings = pScene->GlobalCameraSettings(); KString lCurrentCameraName = lGlobalSettings.GetDefaultCamera(); if (lGlobalCameraSettings.GetCameraProducerPerspective() == NULL && lGlobalCameraSettings.GetCameraProducerBottom() == NULL && lGlobalCameraSettings.GetCameraProducerTop() == NULL && lGlobalCameraSettings.GetCameraProducerFront() == NULL && lGlobalCameraSettings.GetCameraProducerBack() == NULL && lGlobalCameraSettings.GetCameraProducerRight() == NULL && lGlobalCameraSettings.GetCameraProducerLeft() == NULL) { lGlobalCameraSettings.CreateProducerCameras(); } if (lCurrentCameraName.Compare(PRODUCER_PERSPECTIVE) == 0) { return lGlobalCameraSettings.GetCameraProducerPerspective(); } else if (lCurrentCameraName.Compare(PRODUCER_BOTTOM) == 0) { return lGlobalCameraSettings.GetCameraProducerBottom(); } else if (lCurrentCameraName.Compare(PRODUCER_TOP) == 0) { return lGlobalCameraSettings.GetCameraProducerTop(); } else if (lCurrentCameraName.Compare(PRODUCER_FRONT) == 0) { return lGlobalCameraSettings.GetCameraProducerFront(); } else if (lCurrentCameraName.Compare(PRODUCER_BACK) == 0) { return lGlobalCameraSettings.GetCameraProducerBack(); } else if (lCurrentCameraName.Compare(PRODUCER_RIGHT) == 0) { return lGlobalCameraSettings.GetCameraProducerRight(); } else if (lCurrentCameraName.Compare(PRODUCER_LEFT) == 0) { return lGlobalCameraSettings.GetCameraProducerLeft(); } else if (lCurrentCameraName.Compare(CAMERA_SWITCHER) == 0) { KFbxCameraSwitcher* lCameraSwitcher = pScene->GlobalCameraSettings().GetCameraSwitcher(); KFbxAnimCurve* lCurve = NULL; if (lCameraSwitcher) { lCurve = lCameraSwitcher->CameraIndex.GetCurve<KFbxAnimCurve>(gCurrentAnimationLayer); KFCurve* lFCurve = (lCurve)?lCurve->GetKFCurve():NULL; int lCameraIndex = 0; if (lFCurve) lCameraIndex = (int) lFCurve->Evaluate(pTime) - 1; if (lCameraIndex >= 0 && lCameraIndex < pCameraArray.GetCount()) { KFbxNode* lNode = pCameraArray[lCameraIndex]; GetCameraAnimatedParameters(lNode, pTime); return (KFbxCamera*) lNode->GetNodeAttribute(); } } } else { int i; KFbxNode* lNode = NULL; for (i = 0; i < pCameraArray.GetCount(); i++) { if (lCurrentCameraName.Compare(pCameraArray[i]->GetName()) == 0) { lNode = pCameraArray[i]; break; } } if (lNode) { GetCameraAnimatedParameters(lNode, pTime); return (KFbxCamera*) lNode->GetNodeAttribute(); } } return lGlobalCameraSettings.GetCameraProducerPerspective(); }
// Find the current camera at the given time. FbxCamera* GetCurrentCamera(FbxScene* pScene, FbxTime& pTime, FbxAnimLayer* pAnimLayer, const FbxArray<FbxNode*>& pCameraArray) { FbxGlobalSettings& lGlobalSettings = pScene->GetGlobalSettings(); FbxGlobalCameraSettings& lGlobalCameraSettings = pScene->GlobalCameraSettings(); FbxString lCurrentCameraName = lGlobalSettings.GetDefaultCamera(); // check if we need to create the Producer cameras! if (lGlobalCameraSettings.GetCameraProducerPerspective() == NULL && lGlobalCameraSettings.GetCameraProducerBottom() == NULL && lGlobalCameraSettings.GetCameraProducerTop() == NULL && lGlobalCameraSettings.GetCameraProducerFront() == NULL && lGlobalCameraSettings.GetCameraProducerBack() == NULL && lGlobalCameraSettings.GetCameraProducerRight() == NULL && lGlobalCameraSettings.GetCameraProducerLeft() == NULL) { lGlobalCameraSettings.CreateProducerCameras(); } if (lCurrentCameraName.Compare(FBXSDK_CAMERA_PERSPECTIVE) == 0) { return lGlobalCameraSettings.GetCameraProducerPerspective(); } else if (lCurrentCameraName.Compare(FBXSDK_CAMERA_BOTTOM) == 0) { return lGlobalCameraSettings.GetCameraProducerBottom(); } else if (lCurrentCameraName.Compare(FBXSDK_CAMERA_TOP) == 0) { return lGlobalCameraSettings.GetCameraProducerTop(); } else if (lCurrentCameraName.Compare(FBXSDK_CAMERA_FRONT) == 0) { return lGlobalCameraSettings.GetCameraProducerFront(); } else if (lCurrentCameraName.Compare(FBXSDK_CAMERA_BACK) == 0) { return lGlobalCameraSettings.GetCameraProducerBack(); } else if (lCurrentCameraName.Compare(FBXSDK_CAMERA_RIGHT) == 0) { return lGlobalCameraSettings.GetCameraProducerRight(); } else if (lCurrentCameraName.Compare(FBXSDK_CAMERA_LEFT) == 0) { return lGlobalCameraSettings.GetCameraProducerLeft(); } else if (lCurrentCameraName.Compare(FBXSDK_CAMERA_SWITCHER) == 0) { FbxCameraSwitcher* lCameraSwitcher = pScene->GlobalCameraSettings().GetCameraSwitcher(); FbxAnimCurve* lCurve = NULL; if (lCameraSwitcher) { lCurve = lCameraSwitcher->CameraIndex.GetCurve(pAnimLayer); int lCameraIndex = lCurve ? int(lCurve->Evaluate(pTime)) - 1 : 0; if (lCameraIndex >= 0 && lCameraIndex < pCameraArray.GetCount()) { FbxNode* lNode = pCameraArray[lCameraIndex]; // Get the animated parameters of the camera. GetCameraAnimatedParameters(lNode, pTime, pAnimLayer); return (FbxCamera*) lNode->GetNodeAttribute(); } } } else { int i; FbxNode* lNode = NULL; // Find the camera in the camera array. for (i = 0; i < pCameraArray.GetCount(); i++) { if (lCurrentCameraName.Compare(pCameraArray[i]->GetName()) == 0) { lNode = pCameraArray[i]; break; } } if (lNode) { // Get the animated parameters of the camera. GetCameraAnimatedParameters(lNode, pTime, pAnimLayer); return (FbxCamera*) lNode->GetNodeAttribute(); } } return lGlobalCameraSettings.GetCameraProducerPerspective(); }