#include "ormanipcamera_manip.h"
#include <math.h>
#define ORMANIPCAMERA__CLASS ORMANIPCAMERA__CLASSNAME
#define ORMANIPCAMERA__LABEL "OR - Camera"
#define ORMANIPCAMERA__DESC "OR Camera Manipulator Description"
ORMANIPCAMERA__LABEL,
ORMANIPCAMERA__DESC,
bool ORManipulatorCamera::FBCreate()
{
if( FBManipulator::FBCreate() )
{
FBCamera* lCamera =
NULL;
FBModel* lInterest =
NULL;
mZoomingOut = false;
mTurningLeft = false;
mAnimatingAOV = false;
mRotating = false;
mStepAOV = 0.1;
mStepRotate = 0.1;
lCamera = new FBCamera ( "MyCamera" );
lInterest = new FBModelNull ( "MyInterest" );
lCamera->Show = true;
lInterest->Show = true;
lCamera->LookAt = lInterest;
lPos[0] = 200.0;
lPos[1] = 150.0;
lPos[2] = 150.0;
return true;
}
return false;
}
void ORManipulatorCamera::FBDestroy()
{
FBManipulator::FBDestroy();
}
void ORManipulatorCamera::ViewExpose()
{
FBCamera* lCamera = (FBCamera*) CurrentCamera;
char lText[50];
char lText2[50];
sprintf(lText,"Angle of viewX: %lf",(double) lCamera->FieldOfViewX);
sprintf(lText2,"Angle of viewY: %lf",(double) lCamera->FieldOfViewY);
ViewerText = lText;
if(mAnimatingAOV)
{
lCamera->FieldOfView = lCamera->FieldOfView + (mZoomingOut?1:-1)*mStepAOV;
}
if(mRotating)
{
FBModel* lModel = mModelRotate;
if( ! lModel )
{
lModel = CurrentCamera;
}
lUV.mValue[0] = 0.0;
lUV.mValue[1] = 1.0;
lUV.mValue[2] = 0.0;
lRVS.mValue[0] = lVector.mValue[0];
lRVS.mValue[1] = 0.0;
lRVS.mValue[2] = lVector.mValue[2];
double lTLength = lRLength * sin( mStepRotate/57.3 ) / sin( (180-mStepRotate) / (2*57.3) );
FBMult ( lTV, mTurningLeft ? lRVS:lUV, mTurningLeft ? lUV:lRVS );
FBMult ( lTV, lTV, lTLength );
FBAdd ( lRVE, lRVS, lTV );
FBMult ( lRVE, lRVE, lRLength );
lVector.mValue[0] = lRVE.mValue[0];
lVector.mValue[1] = lVector.mValue[1];
lVector.mValue[2] = lRVE.mValue[2];
}
FBManipulator::ViewExpose();
}
bool ORManipulatorCamera::ViewInput(
int pMouseX,
int pMouseY,
FBInputType pAction,
int pButtonKey,
int pModifier)
{
return FBManipulator::ViewInput(pMouseX, pMouseY, pAction, pButtonKey, pModifier);
}