Exemple #1
0
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;

}