?? mgcglutapplication.cpp
字號:
// Magic Software, Inc.
// http://www.magic-software.com
// Copyright (c) 2000, All Rights Reserved
//
// Source code from Magic Software is supplied under the terms of a license
// agreement and may not be copied or disclosed except in accordance with the
// terms of that agreement. The various license agreements may be found at
// the Magic Software web site. This file is subject to the license
//
// FREE SOURCE CODE
// http://www.magic-software.com/License.html/free.pdf
#include "MgcApplication.h"
#include "MgcCommand.h"
#include <MgcGlutRenderer.pkg>
const int MgcApplication::KEY_ESCAPE = 0x1B;
const int MgcApplication::KEY_LEFT_ARROW = GLUT_KEY_LEFT;
const int MgcApplication::KEY_RIGHT_ARROW = GLUT_KEY_RIGHT;
const int MgcApplication::KEY_UP_ARROW = GLUT_KEY_UP;
const int MgcApplication::KEY_DOWN_ARROW = GLUT_KEY_DOWN;
const int MgcApplication::KEY_HOME = GLUT_KEY_HOME;
const int MgcApplication::KEY_END = GLUT_KEY_END;
const int MgcApplication::KEY_PAGE_UP = GLUT_KEY_PAGE_UP;
const int MgcApplication::KEY_PAGE_DOWN = GLUT_KEY_PAGE_DOWN;
const int MgcApplication::KEY_INSERT = GLUT_KEY_INSERT;
const int MgcApplication::KEY_DELETE = 0x2E;
const int MgcApplication::KEY_F1 = GLUT_KEY_F1;
const int MgcApplication::KEY_F2 = GLUT_KEY_F2;
const int MgcApplication::KEY_F3 = GLUT_KEY_F3;
const int MgcApplication::KEY_F4 = GLUT_KEY_F4;
const int MgcApplication::KEY_F5 = GLUT_KEY_F5;
const int MgcApplication::KEY_F6 = GLUT_KEY_F6;
const int MgcApplication::KEY_F7 = GLUT_KEY_F7;
const int MgcApplication::KEY_F8 = GLUT_KEY_F8;
const int MgcApplication::KEY_F9 = GLUT_KEY_F9;
const int MgcApplication::KEY_F10 = GLUT_KEY_F10;
const int MgcApplication::KEY_F11 = GLUT_KEY_F11;
const int MgcApplication::KEY_F12 = GLUT_KEY_F12;
const int MgcApplication::MOUSE_LEFT_BUTTON = GLUT_LEFT_BUTTON;
const int MgcApplication::MOUSE_MIDDLE_BUTTON = GLUT_MIDDLE_BUTTON;
const int MgcApplication::MOUSE_RIGHT_BUTTON = GLUT_RIGHT_BUTTON;
const int MgcApplication::MOUSE_UP = GLUT_UP;
const int MgcApplication::MOUSE_DOWN = GLUT_DOWN;
//----------------------------------------------------------------------------
void MgcApplication::RequestTermination ()
{
exit(0);
}
//----------------------------------------------------------------------------
MgcReal MgcApplication::GetTimeInSeconds ()
{
MgcReal fTime = 0.001*glutGet(GLUT_ELAPSED_TIME);
return fTime;
}
//----------------------------------------------------------------------------
void MgcApplication::MoveCamera ()
{
// GLUT does not have distinct callbacks for key-down versus key-up. So
// I have to reset the 'key down' flags each time. This leads to not so
// smooth camera motion.
if ( m_bUArrowPressed )
{
MoveForward();
m_bUArrowPressed = false;
}
else if ( m_bDArrowPressed )
{
MoveBackward();
m_bDArrowPressed = false;
}
if ( m_bHomePressed )
{
MoveUp();
m_bHomePressed = false;
}
else if ( m_bEndPressed )
{
MoveDown();
m_bEndPressed = false;
}
if ( m_bLArrowPressed )
{
TurnLeft();
m_bLArrowPressed = false;
}
else if ( m_bRArrowPressed )
{
TurnRight();
m_bRArrowPressed = false;
}
if ( m_bPgUpPressed )
{
LookUp();
m_bPgUpPressed = false;
}
else if ( m_bPgDnPressed )
{
LookDown();
m_bPgDnPressed = false;
}
}
//----------------------------------------------------------------------------
static void ReshapeCallback (int iWidth, int iHeight)
{
MgcApplication* pkTheApp = MgcApplication::GetApplication();
if ( pkTheApp )
pkTheApp->OnReshape(iWidth,iHeight);
}
//----------------------------------------------------------------------------
static void DisplayCallback ()
{
MgcApplication* pkTheApp = MgcApplication::GetApplication();
if ( pkTheApp )
pkTheApp->OnDisplay();
}
//----------------------------------------------------------------------------
static void IdleCallback ()
{
MgcApplication* pkTheApp = MgcApplication::GetApplication();
if ( pkTheApp )
pkTheApp->OnIdle();
}
//----------------------------------------------------------------------------
static void KeyPressCallback (unsigned char ucKey, int iX, int iY)
{
MgcApplication* pkTheApp = MgcApplication::GetApplication();
if ( pkTheApp )
pkTheApp->OnKeyPress(ucKey,iX,iY);
}
//----------------------------------------------------------------------------
static void SpecialKeyPressCallback (int iKey, int iX, int iY)
{
MgcApplication* pkTheApp = MgcApplication::GetApplication();
if ( pkTheApp )
pkTheApp->OnSpecialKeyPress(iKey,iX,iY);
}
//----------------------------------------------------------------------------
static void MousePressCallback (int iButton, int iState, int iX, int iY)
{
MgcApplication* pkTheApp = MgcApplication::GetApplication();
if ( pkTheApp )
pkTheApp->OnMousePress(iButton,iState,iX,iY);
}
//----------------------------------------------------------------------------
static void MotionCallback (int iX, int iY)
{
MgcApplication* pkTheApp = MgcApplication::GetApplication();
if ( pkTheApp )
pkTheApp->OnMotion(iX,iY);
}
//----------------------------------------------------------------------------
static void PassiveMotionCallback (int iX, int iY)
{
MgcApplication* pkTheApp = MgcApplication::GetApplication();
if ( pkTheApp )
pkTheApp->OnPassiveMotion(iX,iY);
}
//----------------------------------------------------------------------------
static void Terminate ()
{
MgcApplication* pkTheApp = MgcApplication::GetApplication();
if ( pkTheApp )
{
pkTheApp->OnTerminate();
glutDestroyWindow(pkTheApp->GetWindowID());
}
}
//----------------------------------------------------------------------------
int main (int iQuantity, char** apcArgument)
{
// The unique MgcApplication object must be created pre-main by a
// constuctor call in the application source file.
MgcApplication* pkTheApp = MgcApplication::GetApplication();
assert( pkTheApp );
if ( !pkTheApp )
return -1;
if ( atexit(Terminate) != 0 )
return -2;
glutInit(&iQuantity,apcArgument);
pkTheApp->SetCommand(new MgcCommand(iQuantity,apcArgument));
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(pkTheApp->GetWidth(),pkTheApp->GetHeight());
pkTheApp->SetWindowID(glutCreateWindow(pkTheApp->GetWindowTitle()));
pkTheApp->SetRenderer(new MgcGlutRenderer(pkTheApp->GetWindowID(),
pkTheApp->GetWidth(),pkTheApp->GetHeight()));
pkTheApp->SetCamera(new MgcGlutCamera(pkTheApp->GetWidth(),
pkTheApp->GetHeight()));
if ( !pkTheApp->OnInitialize() )
return -3;
glutReshapeFunc(ReshapeCallback);
glutDisplayFunc(DisplayCallback);
glutIdleFunc(IdleCallback);
glutKeyboardFunc(KeyPressCallback);
glutSpecialFunc(SpecialKeyPressCallback);
glutMouseFunc(MousePressCallback);
glutMotionFunc(MotionCallback);
glutPassiveMotionFunc(PassiveMotionCallback);
glutMainLoop();
return 0;
}
//----------------------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -