亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mgcglutapplication.cpp

?? 《3D游戲引擎設計》的源碼
?? 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 + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文文精品字幕一区二区| 7777精品伊人久久久大香线蕉完整版 | 国产欧美一区二区精品性| 亚洲欧美怡红院| 婷婷六月综合亚洲| aaa欧美色吧激情视频| 欧美一级二级三级乱码| 国产精品视频在线看| 蜜臀久久99精品久久久久宅男| 成人av网在线| 精品国产一区二区三区久久久蜜月 | 国产乱淫av一区二区三区| 日本韩国精品在线| 国产mv日韩mv欧美| 老汉av免费一区二区三区| 国产91精品免费| 欧美一区二区三区四区视频| 国产精品国产成人国产三级| 精品一区二区在线视频| 欧美精品久久久久久久久老牛影院| 中文在线资源观看网站视频免费不卡| 午夜精品久久久| 在线观看网站黄不卡| 国产精品色哟哟网站| 激情欧美一区二区| 欧美精品少妇一区二区三区 | 国产一区二区成人久久免费影院| 在线亚洲高清视频| 亚洲视频免费看| kk眼镜猥琐国模调教系列一区二区| 精品毛片乱码1区2区3区| 日韩精品电影在线| 26uuu久久综合| 玉足女爽爽91| 色综合天天综合网天天看片| 国产精品国模大尺度视频| 国产99精品国产| 久久五月婷婷丁香社区| 国产麻豆精品95视频| 精品美女一区二区| 国产综合色视频| 日韩欧美黄色影院| 精品在线一区二区| 久久先锋资源网| 国产精品18久久久久久久久久久久| 精品国产一区久久| 国产精品1024| 中文一区二区完整视频在线观看| 国产91丝袜在线播放0| 欧美经典一区二区三区| 风间由美性色一区二区三区| 国产精品久久久久久久久免费樱桃 | 九九精品一区二区| jvid福利写真一区二区三区| 国产精品成人网| 欧美亚洲国产一区二区三区| 性久久久久久久| 欧美岛国在线观看| 成人网页在线观看| 亚洲精品午夜久久久| 欧美日韩不卡在线| 国产一区二区三区四 | 欧美日韩国产区一| 理论片日本一区| 国产丝袜在线精品| 一本大道综合伊人精品热热 | 五月激情综合网| 精品国产1区2区3区| 成人高清视频在线| 亚洲妇女屁股眼交7| 精品国产乱码久久久久久久| av在线播放成人| 亚洲sss视频在线视频| 久久午夜色播影院免费高清| 色婷婷综合久久| 免费成人美女在线观看.| 欧美国产一区在线| 欧美午夜不卡视频| 国产黄色91视频| 一级特黄大欧美久久久| www国产成人| 91国产免费观看| 国产成人av一区二区三区在线观看| 一区二区三区色| 久久精品在这里| 51午夜精品国产| www.在线成人| 精品中文av资源站在线观看| 亚洲精品乱码久久久久久黑人 | 视频一区中文字幕| 国产精品免费aⅴ片在线观看| 欧美日韩一本到| 成人高清在线视频| 国内精品自线一区二区三区视频| 一区二区三区中文字幕电影 | 日韩精品每日更新| 1024国产精品| 久久久青草青青国产亚洲免观| 欧美在线色视频| 99在线精品观看| 国产成人av资源| 国内欧美视频一区二区| 日韩精品一卡二卡三卡四卡无卡| 亚洲女与黑人做爰| 国产精品欧美精品| 国产三级欧美三级日产三级99| 欧美日韩精品一区二区天天拍小说| 成人午夜电影久久影院| 国产伦精品一区二区三区在线观看| 日韩专区一卡二卡| 亚洲一区二区在线免费观看视频| 中文字幕免费一区| 久久青草欧美一区二区三区| 日韩视频123| 欧美一区二区在线免费观看| 欧美日韩午夜在线视频| 欧美性色综合网| 色先锋资源久久综合| 成人av电影免费观看| 成人精品国产免费网站| 成人免费视频网站在线观看| 国产精品一卡二卡在线观看| 国产最新精品免费| 国产一区二区不卡在线| 国产夫妻精品视频| 国产福利不卡视频| 成人晚上爱看视频| 色哟哟国产精品| 91成人在线精品| 欧美日韩亚洲国产综合| 欧美日韩一区二区三区视频| 欧美日韩色综合| 欧美猛男超大videosgay| 欧美高清你懂得| 日韩午夜在线观看视频| 精品不卡在线视频| 国产精品毛片a∨一区二区三区| 中文字幕 久热精品 视频在线| 中文字幕在线一区免费| 一级精品视频在线观看宜春院| 亚洲一区二区偷拍精品| 蜜臀av一区二区| 国产一区二区三区国产| 成人黄色在线网站| 日本精品一区二区三区高清 | ㊣最新国产の精品bt伙计久久| 亚洲人成网站色在线观看| 亚洲国产精品一区二区久久恐怖片| 亚洲va欧美va天堂v国产综合| 九九国产精品视频| 99久久久免费精品国产一区二区| 色偷偷一区二区三区| 91麻豆精品国产91久久久使用方法| 欧美一级高清片| 国产精品乱人伦中文| 亚洲一区二区三区美女| 久久99精品国产| 色妹子一区二区| 69堂国产成人免费视频| 国产午夜三级一区二区三| 亚洲精品自拍动漫在线| 蓝色福利精品导航| 一本色道综合亚洲| 欧美成人女星排名| 亚洲男人都懂的| 国产自产2019最新不卡| 欧美亚洲免费在线一区| 精品成人私密视频| 亚洲高清在线视频| 成人精品免费看| 欧美www视频| 亚洲v中文字幕| 成人国产精品免费观看视频| 日韩免费观看高清完整版在线观看| 亚洲欧洲精品一区二区三区不卡| 五月开心婷婷久久| 色综合久久88色综合天天免费| 亚洲精品在线观看网站| 五月天国产精品| 一本色道久久综合精品竹菊| 国产亚洲精品中文字幕| 蜜臀av一区二区在线观看| 欧美性猛片aaaaaaa做受| 日本一区二区三区国色天香 | 国产盗摄视频一区二区三区| 69p69国产精品| 亚洲一区二区欧美日韩| 成人高清视频在线| 中文字幕av一区二区三区免费看 | 视频一区二区不卡| 一本久久a久久精品亚洲| 国产精品久久久久久久第一福利 | 亚洲视频你懂的| 国产.欧美.日韩| 久久夜色精品国产欧美乱极品| 天天综合日日夜夜精品| 欧美日韩一区二区欧美激情| 亚洲愉拍自拍另类高清精品| 99久久婷婷国产综合精品电影| 久久精品欧美日韩精品|