青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當(dāng)自強(qiáng)而不息

創(chuàng)建3D圖形引擎(1)【OO改良版】

 

3D圖形引擎【OO改良版】的代碼以創(chuàng)建游戲內(nèi)核【OO改良版】中編寫的代碼為基礎(chǔ)進(jìn)行開發(fā),關(guān)于該引擎的細(xì)節(jié)說明請參閱創(chuàng)建3D圖形引擎(1)
 

/************************************************************************************
PURPOSE:
    mesh level test.
************************************************************************************/


#include "core_common.h"
#include "core_framework.h"
#include "core_graphics.h"
#include "core_input.h"

class APP : public FRAMEWORK
{
public:
    BOOL init()
    {              
        
if(! create_display(g_hwnd, get_client_width(g_hwnd), get_client_height(g_hwnd), 16, TRUE, TRUE))
            
return FALSE;

        set_perspective(D3DX_PI / 4, 1.3333f, 1.0f, 10000.0f);

        
// initialize input and input device
        m_input.create(g_hwnd, get_window_inst());
        m_keyboard.create(&m_input, KEYBOARD, TRUE);
        m_mouse.create(&m_input, MOUSE, TRUE);

        
// load the room meshes
        if(! m_room_meshes[0].load("..\\Data\\Corridor.x", "..\\Data\\"))
            
return FALSE;

        
if(! m_room_meshes[1].load("..\\Data\\Room.x", "..\\Data\\"))
            
return FALSE;

        
// setup the room objects
        m_room_objects[0].create(&m_room_meshes[1]);
        m_room_objects[1].create(&m_room_meshes[0]);  
        m_room_objects[2].create(&m_room_meshes[1]);
        m_room_objects[3].create(&m_room_meshes[0]);
        m_room_objects[4].create(&m_room_meshes[0]);
        m_room_objects[5].create(&m_room_meshes[1]);
        m_room_objects[6].create(&m_room_meshes[0]);
        m_room_objects[7].create(&m_room_meshes[1]);

        
// place room object in specified position
        m_room_objects[0].move(-2000.0f, 0.0f,  2000.0f);
        m_room_objects[1].move(    0.0f, 0.0f,  2000.0f);  
        m_room_objects[2].move( 2000.0f, 0.0f,  2000.0f);
        m_room_objects[3].move(-2000.0f, 0.0f,     0.0f);
        m_room_objects[4].move( 2000.0f, 0.0f,     0.0f);
        m_room_objects[5].move(-2000.0f, 0.0f, -2000.0f);
        m_room_objects[6].move(    0.0f, 0.0f, -2000.0f);
        m_room_objects[7].move( 2000.0f, 0.0f, -2000.0f);

        
// rotate room object into proper orientation
        m_room_objects[1].rotate(0.0f,  1.57f, 0.0f);
        m_room_objects[2].rotate(0.0f,  1.57f, 0.0f);
        m_room_objects[5].rotate(0.0f, -1.57f, 0.0f);
        m_room_objects[6].rotate(0.0f, -1.57f, 0.0f);
        m_room_objects[7].rotate(0.0f,  3.14f, 0.0f);

        
// position view in a room
        m_x_pos = -2000.0f;
        m_z_pos = -2000.0f;

        
//m_camera.init();

        
return TRUE;
    }

    BOOL frame()
    {
        
static DWORD time_now = timeGetTime();

        
// calculate elapsed time (plus speed boost)
        ulong time_elapsed = (timeGetTime() - time_now) * 2;

        time_now = timeGetTime();

        
// read input device data
        m_keyboard.read();
        m_mouse.read();

        
// process input and update everything, ESC quits program.
        if(m_keyboard.get_key_state(KEY_ESC))
            
return FALSE;

        
float x_move = 0.0f;
        
float z_move = 0.0f;

        
// ok, now let me explain next codes.
        //
        // m_camera.get_y_rotation():
        //      get camera vector in xoz plane.
        //
        // sin(m_camera.get_y_rotation()):
        //      get x-coordinate of camera vector.
        //
        // cos(m_camera.get_y_rotation()):
        //      get z-coordinate of camera vector.

        // move viewpoint forward
        if(m_keyboard.get_key_state(KEY_UP))
        {
            x_move = (
float) sin(m_camera.get_y_rotation()) * time_elapsed;
            z_move = (
float) cos(m_camera.get_y_rotation()) * time_elapsed;
        }

        
// move viewpoint backward
        if(m_keyboard.get_key_state(KEY_DOWN))
        {
            x_move = -(
float) sin(m_camera.get_y_rotation()) * time_elapsed;
            z_move = -(
float) cos(m_camera.get_y_rotation()) * time_elapsed;
        }

        
// translate camera left-right movement into up-down movement.
        //
        // m_camera.get_y_rotation() - 1.57f:
        //      rotate camera 90 degree anticlockwise.
        //
        // sin(m_camera.get_y_rotation() - 1.57f):
        //      get x-coordinate of camera vector after camera rotation.
        //
        // cos(m_camera.get_y_rotation() - 1.57f):
        //     get z-coordinate of camera vector after camera rotation. 
        
        // move viewpoint left
        if(m_keyboard.get_key_state(KEY_LEFT))
        {
            x_move = (
float) sin(m_camera.get_y_rotation() - 1.57f) * time_elapsed;
            z_move = (
float) cos(m_camera.get_y_rotation() - 1.57f) * time_elapsed;
        }

        
// m_camera.get_y_rotation() + 1.57f:
        //      rotate camera 90 degree clockwise.
        //
        // sin(m_camera.get_y_rotation() + 1.57f):
        //      get x-coordinate of camera vector after camera rotation.
        //
        // cos(m_camera.get_y_rotation() + 1.57f):
        //      get z-coordinate of camera vector after camera rotation.

        // move viewpoint right
        if(m_keyboard.get_key_state(KEY_RIGHT))
        {
            x_move = (
float) sin(m_camera.get_y_rotation() + 1.57f) * time_elapsed;
            z_move = (
float) cos(m_camera.get_y_rotation() + 1.57f) * time_elapsed;
        }

        
// update view coordinates
        m_x_pos += x_move;
        m_z_pos += z_move;

        
// position camera and rotate based on mouse position

        m_camera.move(m_x_pos, 400.0f, m_z_pos);

        
// m_mouse.get_y_delta():
        //      get mouse's relative x movement coordinate.
        //
        // m_mouse.get_x_delta():
        //      get mouse's relative y movement coordinate.

        m_camera.rotate_rel(m_mouse.get_y_delta() / 200.0f, m_mouse.get_x_delta() / 200.0f, 0.0f);

        
// set view transform matrix
        g_d3d_device->SetTransform(D3DTS_VIEW, m_camera.get_view_matrix());

        
// render everything
        clear_display(D3DCOLOR_RGBA(0, 64, 128, 255), 1.0f);

        
// begin render now
        if(SUCCEEDED(g_d3d_device->BeginScene()))
        {
            
// render each room
            for(short i = 0; i < 8; i++)
                m_room_objects[i].render();

            g_d3d_device->EndScene();            
        }

        present_display();        

        
return TRUE;
    }

    BOOL shutdown()
    {
        
return TRUE;
    }

private:
    CAMERA          m_camera;

    INPUT           m_input;
    INPUT_DEVICE    m_keyboard;
    INPUT_DEVICE    m_mouse;    
    MESH            m_room_meshes[2];
    OBJECT          m_room_objects[8];

    
float           m_x_pos, m_z_pos;
};

int WINAPI WinMain(HINSTANCE inst, HINSTANCE, LPSTR cmd_line, int cmd_show)
{
    DWORD _client_width  = 640;
    DWORD _client_height = 480;
    DWORD _x_pos = (get_screen_width()  - _client_width) / 2;
    DWORD _y_pos = (get_screen_height() - _client_height) / 4;

    
if(! build_window(inst, "mesh_level_class", "mesh level test", 
                      WS_BORDER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU,
                      _x_pos, _y_pos, _client_width, _client_height))
    {
        
return -1;
    }

    APP app;
    app.run();

    
return 0;
}

posted on 2007-10-18 21:09 lovedday 閱讀(514) 評(píng)論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美偷拍一区二区| 亚洲桃花岛网站| 亚洲先锋成人| 99精品视频网| 久久综合五月天婷婷伊人| 午夜精品久久久久影视| 欧美精品少妇一区二区三区| 久久国产精品网站| 国产精品久久久久久久app| 男女激情久久| 激情91久久| 性色av一区二区三区| 亚洲视频在线观看网站| 欧美黄色小视频| 亚洲国产美女久久久久| 伊人精品在线| 久久久久久伊人| 久久综合影视| 国产一区二区三区高清| 亚洲男人的天堂在线| 欧美精品91| 亚洲国产成人av| 亚洲人成网站在线播| 久久久夜色精品亚洲| 麻豆精品在线视频| 黄色在线一区| 久久亚洲国产精品一区二区| 久久久www| 激情综合自拍| 狂野欧美激情性xxxx欧美| 久久综合久久综合久久综合| 国内自拍亚洲| 男同欧美伦乱| 亚洲精品久久久久| 99视频精品| 国产精品日本| 欧美专区亚洲专区| 欧美凹凸一区二区三区视频| 影音国产精品| 久久亚洲风情| 亚洲精品一区二区网址| 亚洲性人人天天夜夜摸| 国产精品视频专区| 久久久国产亚洲精品| 欧美高清视频在线| 99精品99| 国产欧美日韩在线播放| 久久伊人免费视频| 亚洲欧洲日本专区| 欧美一区二区视频免费观看| 国外成人在线视频网站| 欧美成人精品在线播放| 99这里只有久久精品视频| 欧美一区二区精品久久911| 国内久久婷婷综合| 欧美日韩国产限制| 欧美一区二区精品| 亚洲欧洲精品一区二区三区不卡| 亚洲在线1234| 一区二区三区在线观看欧美| 欧美黄色成人网| 亚洲欧美综合一区| 亚洲国产精品一区制服丝袜 | 久久久国产一区二区三区| 激情六月婷婷综合| 欧美日本亚洲| 性欧美18~19sex高清播放| 亚洲国产成人91精品| 欧美影院成年免费版| 亚洲精品一区中文| 国产乱肥老妇国产一区二| 久久综合国产精品| 亚洲视频欧美视频| 亚洲第一网站免费视频| 性欧美8khd高清极品| 亚洲卡通欧美制服中文| 国内外成人在线| 欧美日韩视频在线一区二区 | 午夜久久电影网| 亚洲激情不卡| 国产亚洲一区二区精品| 欧美日本在线播放| 久久资源av| 午夜精品久久久久99热蜜桃导演| 最新日韩中文字幕| 亚洲成人直播| 最新成人av网站| 国产亚洲福利社区一区| 欧美视频日韩视频在线观看| 久久综合网络一区二区| 久久av红桃一区二区小说| 亚洲午夜精品网| 亚洲精选视频免费看| 亚洲国产日韩在线| 欧美高潮视频| 蜜乳av另类精品一区二区| 久久久噜噜噜| 久久天堂成人| 久久久久久久久蜜桃| 久久爱www久久做| 性一交一乱一区二区洋洋av| 亚洲影院免费观看| 亚洲校园激情| 亚洲网站啪啪| 亚洲一级免费视频| 亚洲一区二区网站| 亚洲综合国产精品| 亚洲欧美日本伦理| 午夜视频精品| 西西人体一区二区| 香蕉久久夜色精品国产| 午夜欧美不卡精品aaaaa| 欧美亚洲日本国产| 欧美一区免费| 久久久久久久成人| 久久中文字幕一区| 欧美成人按摩| 亚洲精品国产精品国产自| 91久久中文| 一区二区毛片| 亚洲永久免费视频| 久久国产手机看片| 免费人成网站在线观看欧美高清| 久久夜色精品一区| 欧美精品一区二区精品网 | 国产精品乱码妇女bbbb| 国产日产欧美精品| 好看的亚洲午夜视频在线| 亚洲二区免费| 在线亚洲免费视频| 欧美专区18| 男女激情视频一区| 亚洲精品你懂的| 亚洲一区二区三| 欧美中文在线免费| 男人插女人欧美| 国产精品红桃| 精品电影在线观看| 9国产精品视频| 欧美专区在线观看一区| 欧美电影在线观看| 一区二区三区四区五区视频| 午夜精品www| 欧美高清视频在线| 国产麻豆综合| 91久久综合亚洲鲁鲁五月天| 午夜激情综合网| 免费看亚洲片| 亚洲视频一起| 理论片一区二区在线| 国产精品久久国产三级国电话系列 | 国产精品美女久久福利网站| 伊甸园精品99久久久久久| 亚洲午夜精品网| 老**午夜毛片一区二区三区| 亚洲乱码国产乱码精品精天堂 | 欧美调教vk| 在线精品国精品国产尤物884a| 一区二区三区国产在线| 久久成人久久爱| 日韩一二三区视频| 久久综合给合久久狠狠色| 国产精品女主播| 亚洲精品欧洲| 妖精成人www高清在线观看| 久久久久久有精品国产| 亚洲天堂第二页| 欧美精品国产精品| 亚洲成人原创| 久久精品在线免费观看| 在线一区视频| 欧美日韩国产成人| 亚洲国产成人不卡| 久久久91精品国产一区二区三区| 日韩一区二区精品| 欧美理论在线播放| 亚洲国语精品自产拍在线观看| 久久精品国产99| 亚洲欧美韩国| 国产精品狼人久久影院观看方式| 一本一本a久久| 亚洲国产精品悠悠久久琪琪 | 久久久久久91香蕉国产| 国产乱肥老妇国产一区二| 亚洲主播在线| 亚洲美女在线一区| 欧美日韩国产高清| 一本色道久久88精品综合| 亚洲黄色毛片| 欧美激情视频网站| 亚洲精品美女久久7777777| 欧美韩日一区| 免费看的黄色欧美网站| 亚洲国产一区二区三区青草影视| 久久蜜桃资源一区二区老牛| 久久久999精品免费| 影院欧美亚洲| 欧美激情中文字幕乱码免费| 女人香蕉久久**毛片精品| 亚洲美女毛片|