#include "GlFunctions.h"
void GlSetCameraPerspective(double pFieldOfViewY,
                            double pAspect,
                            double pNearPlane,
                            double pFarPlane,
                            double  pFilmOffsetX,
                            double  pFilmOffsetY)
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glTranslated( pFilmOffsetX, pFilmOffsetY, 0);
    gluPerspective(pFieldOfViewY, 
        pAspect, 
        pNearPlane, 
        pFarPlane);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(pEye[0], pEye[1], pEye[2],
        pCenter[0], pCenter[1], pCenter[2],
        pUp[0], pUp[1], pUp[2]);
}
void GlSetCameraOrthogonal(double pLeftPlane,
                           double pRightPlane,
                           double pBottomPlane,
                           double pTopPlane,
                           double pNearPlane,
                           double pFarPlane,
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();  
    glOrtho(pLeftPlane, 
        pRightPlane, 
        pBottomPlane, 
        pTopPlane, 
        pNearPlane, 
        pFarPlane); 
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(pEye[0], pEye[1], pEye[2],
        pCenter[0], pCenter[1], pCenter[2],
        pUp[0], pUp[1], pUp[2]);
}
{
    glColor3f(0.0, 1.0, 1.0);
    glLineWidth(1.0);
    glPushMatrix();
    glMultMatrixd((double*) pGlobalPosition);
    glBegin(GL_LINE_LOOP);
        glVertex3f(+1.0f, -1.0f, +1.0f);
        glVertex3f(+1.0f, -1.0f, -1.0f);
        glVertex3f(+1.0f, +1.0f, -1.0f);
        glVertex3f(+1.0f, +1.0f, +1.0f);
        glVertex3f(+1.0f, +1.0f, +1.0f);
        glVertex3f(+1.0f, +1.0f, -1.0f);
        glVertex3f(-1.0f, +1.0f, -1.0f);
        glVertex3f(-1.0f, +1.0f, +1.0f);
        glVertex3f(+1.0f, +1.0f, +1.0f);
        glVertex3f(-1.0f, +1.0f, +1.0f);
        glVertex3f(-1.0f, -1.0f, +1.0f);
        glVertex3f(+1.0f, -1.0f, +1.0f);
        glVertex3f(-1.0f, -1.0f, +1.0f);
        glVertex3f(-1.0f, +1.0f, +1.0f);
        glVertex3f(-1.0f, +1.0f, -1.0f);
        glVertex3f(-1.0f, -1.0f, -1.0f);
        glVertex3f(-1.0f, -1.0f, +1.0f);
        glVertex3f(-1.0f, -1.0f, -1.0f);
        glVertex3f(+1.0f, -1.0f, -1.0f);
        glVertex3f(+1.0f, -1.0f, +1.0f);
        glVertex3f(-1.0f, -1.0f, -1.0f);
        glVertex3f(-1.0f, +1.0f, -1.0f);
        glVertex3f(+1.0f, +1.0f, -1.0f);
        glVertex3f(+1.0f, -1.0f, -1.0f);
    glEnd();
    glPopMatrix();
}
{
    glColor3f(1.0, 0.0, 0.0);
    glLineWidth(2.0);
    glBegin(GL_LINES);
    glVertex3dv((GLdouble *)pGlobalBasePosition.
GetT());
 
    glVertex3dv((GLdouble *)pGlobalEndPosition.
GetT());
 
    glEnd();
}
void GlDrawCamera(
FbxAMatrix& pGlobalPosition, 
double pRoll)
 
{
    glColor3d(1.0, 1.0, 1.0);
    glLineWidth(1.0);
    glPushMatrix();
    glMultMatrixd((double*) pGlobalPosition);
    glRotated(pRoll, 1.0, 0.0, 0.0);
    int i;
    float lCamera[10][2] = {{ 0, 5.5 }, { -3, 4.5 },
    { -3, 7.5 }, { -6, 10.5 }, { -23, 10.5 },
    { -23, -4.5 }, { -20, -7.5 }, { -3, -7.5 },
    { -3, -4.5 }, { 0, -5.5 }   };
    glBegin( GL_LINE_LOOP );
    {
        for (i = 0; i < 10; i++)
        {
            glVertex3f(lCamera[i][0], lCamera[i][1], 4.5);
        }
    }
    glEnd();
    glBegin( GL_LINE_LOOP );
    {
        for (i = 0; i < 10; i++)
        {
            glVertex3f(lCamera[i][0], lCamera[i][1], -4.5);
        }
    }
    glEnd();
    for (i = 0; i < 10; i++)
    {
        glBegin( GL_LINES );
        {
            glVertex3f(lCamera[i][0], lCamera[i][1], -4.5);
            glVertex3f(lCamera[i][0], lCamera[i][1], 4.5);
        }
        glEnd();
    }
    glPopMatrix();
}
{
    glColor3f(1.0, 1.0, 1.0);
    glLineWidth(1.0);
    glPushMatrix();
    glMultMatrixd((double*) pGlobalPosition);
    double lCrossHair[6][3] = { { -3, 0, 0 }, { 3, 0, 0 },
    { 0, -3, 0 }, { 0, 3, 0 },
    { 0, 0, -3 }, { 0, 0, 3 } };
    glBegin(GL_LINES);
    glVertex3dv(lCrossHair[0]);
    glVertex3dv(lCrossHair[1]);
    glEnd();
    glBegin(GL_LINES);
    glVertex3dv(lCrossHair[2]);
    glVertex3dv(lCrossHair[3]);
    glEnd();
    glBegin(GL_LINES);
    glVertex3dv(lCrossHair[4]);
    glVertex3dv(lCrossHair[5]);
    glEnd();
    glPopMatrix();
}