void FbxParser::ProcessCamera(FbxNode* pNode, GS::Camera& camera) { FbxCamera* lCamera = (FbxCamera*) pNode->GetNodeAttribute(); if (lCamera == NULL) return ; FbxNode* pTargetNode = pNode->GetTarget(); FbxNode* pTargetUpNode = pNode->GetTargetUp(); FbxVector4 lEye = lCamera->Position.Get(); FbxVector4 lUp; FbxVector4 lCenter; if (!pTargetNode) lCenter = lCamera->InterestPosition.Get(); if (!pTargetUpNode) lUp = lCamera->UpVector.Get(); double lRadians = PI * lCamera->Roll.Get() / 180.0; // Align the up vector. FbxVector4 lForward = lCenter - lEye; lForward.Normalize(); FbxVector4 lRight = lForward.CrossProduct(lUp); lRight.Normalize(); lUp = lRight.CrossProduct(lForward); lUp.Normalize(); lUp *= cos(lRadians); lRight *= sin(lRadians); lUp = lUp + lRight; GS::float3 pos(lEye[0], lEye[1], lEye[2]); GS::float3 up(lUp[0], lUp[1], lUp[2]); GS::float3 target(lCenter[0], lCenter[1], lCenter[2]); GS::Camera cam(pos, target, up); float lNearPlane = 0.01f; if (lCamera) lNearPlane = lCamera->GetNearPlane(); float lFarPlane = 1000.0; if (lCamera) lFarPlane = lCamera->GetFarPlane(); bool bPerspectice = lCamera->ProjectionType.Get() == FbxCamera::ePerspective ; //bPerspectice = true; cam.SetProjectionMode(bPerspectice); cam.SetProjectionPlanes(lNearPlane, lFarPlane); camera = cam; }