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

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

?? md3viewer.cpp

?? Direct3D游戲編程入門教程源代碼.rar
?? CPP
字號:
//-------------------------------------------------------------------------
// File: md3viewer.cpp
//
// Desc: Example code showing how to open and render 
//		 a Quake 3 *.md3 file
//
// Last modified: 20. Dezember 2000
//
// Copyright (c) 1997-1999 Microsoft Corporation. All rights reserved.
// Copyright (c) 1999-2001 Wolfgang Engel wolf@direct3d.net
//--------------------------------------------------------------------------
#define STRICT
#include <stdio.h>
#include <windows.h>
#include <commdlg.h>
#include <D3DX8.h>
#include "D3DApp.h"
#include "D3DFont.h"
#include "D3DUtil.h"
#include "DXUtil.h"
#include "resource.h"
#include "md3.h"

//-----------------------------------------------------------------------------
// Name: class CMyD3DApplication
// Desc: Main class to run this application. Most functionality is inherited
//       from the CD3DApplication base class.
//-----------------------------------------------------------------------------
class CMyD3DApplication : public CD3DApplication
{
	CMD3Model* cmd3Model1;

    CD3DArcBall         m_ArcBall;              // Mouse rotation utility
    D3DXVECTOR3         m_vObjectCenter;        // Center of bounding sphere of object
    FLOAT               m_fObjectRadius;        // Radius of bounding sphere of object

    CD3DFont*           m_pFont;                // Font for displaying help
    BOOL                m_bDisplayHelp;

	// *.md3 file path
    TCHAR m_strInitialDir[512];
    TCHAR m_strFileName[512];
public:
    HRESULT OneTimeSceneInit();
    HRESULT InitDeviceObjects();
    HRESULT RestoreDeviceObjects();
    HRESULT InvalidateDeviceObjects();
    HRESULT DeleteDeviceObjects();
    HRESULT Render();
    HRESULT FrameMove();
    HRESULT FinalCleanup();
    LRESULT MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );

	HRESULT LoadFile(CMD3Model *model);	// MD3 LoadFile dialog
    CMyD3DApplication();
};

//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: Entry point to the program. Initializes everything, and goes into a
//       message-processing loop. Idle time is used to render the scene.
//-----------------------------------------------------------------------------
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
    CMyD3DApplication d3dApp;

    if( FAILED( d3dApp.Create( hInst ) ) )
        return 0;

    return d3dApp.Run();
}

//-----------------------------------------------------------------------------
// Name: CMyD3DApplication()
// Desc: Constructor
//-----------------------------------------------------------------------------
CMyD3DApplication::CMyD3DApplication()
{
    // Override base class members
    m_strWindowTitle    = _T("MD3 Viewer with D3D");
    m_bUseDepthBuffer   = TRUE;
    m_bShowCursorWhenFullscreen = TRUE;

    cmd3Model1           = new CMD3Model();

    m_pFont              = new CD3DFont( _T("Arial"), 12, D3DFONT_BOLD );
    m_bDisplayHelp       = FALSE;
	m_fObjectRadius = 1.77f;
	m_vObjectCenter = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
}

//-----------------------------------------------------------------------------
// Name: OneTimeSceneInit()
// Desc: Called during initial app startup, this function performs all the
//       permanent initialization.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::OneTimeSceneInit()
{
    // Set cursor to indicate that user can move the object with the mouse
#ifdef _WIN64
    SetClassLongPtr( m_hWnd, GCLP_HCURSOR, (LONG_PTR)LoadCursor( NULL, IDC_SIZEALL ) );
#else
    SetClassLong( m_hWnd, GCL_HCURSOR, (LONG)LoadCursor( NULL, IDC_SIZEALL ) );
#endif
    return S_OK;
}

//-----------------------------------------------------------------------------
// Name: FrameMove()
// Desc: Called once per frame, the call is the entry point for animating
//       the scene.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::FrameMove()
{	
	// world transformation
    D3DXMATRIX matRotationInverse, matWorld;
    D3DXMatrixTranslation( &matWorld, -m_vObjectCenter.x,
                                      -m_vObjectCenter.y,
                                      -m_vObjectCenter.z );
    D3DXMatrixInverse( &matRotationInverse, NULL, m_ArcBall.GetRotationMatrix() );
    D3DXMatrixMultiply( &matWorld, &matWorld, &matRotationInverse );
    D3DXMatrixMultiply( &matWorld, &matWorld, m_ArcBall.GetTranslationMatrix() );
    m_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

    // Set up view matrix
    D3DXMATRIX matView;
    D3DXMatrixLookAtRH( &matView, &D3DXVECTOR3( 0, 0,-48*m_fObjectRadius ),
                                  &D3DXVECTOR3( 0, 0, 0 ),
                                  &D3DXVECTOR3( 0, 1, 0 ) );
	/*  To switch to a right handed coordinate system like in OpenGL, we have to 
	    flip the sign of the _31, _32, _33, and _34 member of the D3DXMATRIX.
	*/
    matView._31 = -matView._31; 
	matView._32 = -matView._32; 
	matView._33 = -matView._33;
	matView._34 = -matView._34;
	
    m_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
	
   return S_OK;
}

//-----------------------------------------------------------------------------
// Name: Render()
// Desc: Called once per frame, the call is the entry point for 3d
//       rendering. This function sets up render states, clears the
//       viewport, and renders the scene.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::Render()
{
    // Clear the backbuffer
    m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,
                         0x00000000, 1.0f, 0x00000000);

	// set wireframe view
//	m_pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME);

    // Begin scene rendering
    if( SUCCEEDED( m_pd3dDevice->BeginScene() ) )
    {
		cmd3Model1->Render(m_pd3dDevice);

        // Output statistics
        m_pFont->DrawText( 2,  0, D3DCOLOR_ARGB(255,255,255,0), m_strFrameStats);
        m_pFont->DrawText( 2, 20, D3DCOLOR_ARGB(255,255,255,0), m_strDeviceStats);

        // End the scene rendering
        m_pd3dDevice->EndScene();
    }

    return S_OK;
}

//-----------------------------------------------------------------------------
// Name: InitDeviceObjects()
// Desc: Initialize scene objects.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::InitDeviceObjects()
{
    // Initialize the font
    m_pFont->InitDeviceObjects( m_pd3dDevice );


    // Load a *.md3 file the first time around
    static BOOL bFirstInstance = TRUE;
    if( bFirstInstance ) 
    {
        Pause( TRUE );
        LoadFile(cmd3Model1);
        Pause( FALSE );
        bFirstInstance = FALSE;
    }
	else
	{
	    cmd3Model1->InitDeviceObjects( m_pd3dDevice );
	}

    return S_OK;
}

//-----------------------------------------------------------------------------
// Name: RestoreDeviceObjects()
// Desc: Initialize scene objects.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::RestoreDeviceObjects()
{
    m_pFont->RestoreDeviceObjects();

    D3DMATERIAL8 mtrl;
    D3DUtil_InitMaterial( mtrl, 1.0f, 1.0f, 1.0f );
    m_pd3dDevice->SetMaterial( &mtrl );

    // Setup render state
    m_pd3dDevice->SetRenderState( D3DRS_LIGHTING,     TRUE );
    m_pd3dDevice->SetRenderState( D3DRS_DITHERENABLE, TRUE );
    m_pd3dDevice->SetRenderState( D3DRS_ZENABLE,      TRUE );
    m_pd3dDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR );
    m_pd3dDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR );

    // Setup the light
    D3DLIGHT8 light;
    D3DUtil_InitLight(light, D3DLIGHT_DIRECTIONAL, 0.0f, -0.5f, 1.0f );
    m_pd3dDevice->SetLight(0, &light );
    m_pd3dDevice->LightEnable(0, TRUE );
    m_pd3dDevice->SetRenderState(D3DRS_AMBIENT, 0x00333333);

    // Set the arcball parameters
    m_ArcBall.SetWindow( m_d3dsdBackBuffer.Width, m_d3dsdBackBuffer.Height,
                         0.85f );
    m_ArcBall.SetRadius( m_fObjectRadius );

    // Set the projection matrix
    D3DXMATRIX matProj;
    FLOAT      fAspect = m_d3dsdBackBuffer.Width / (FLOAT)m_d3dsdBackBuffer.Height;
    D3DXMatrixPerspectiveFovRH( &matProj, D3DX_PI/4, fAspect, m_fObjectRadius/64.0f,
                                m_fObjectRadius*200.0f);
    m_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );

    return S_OK;
}

//-----------------------------------------------------------------------------
// Name: InvalidateDeviceObjects()
// Desc: 
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::InvalidateDeviceObjects()
{
    m_pFont->InvalidateDeviceObjects();
  return S_OK;
}




//-----------------------------------------------------------------------------
// Name: DeleteDeviceObjects()
// Desc: Called when the app is exiting, or the device is being changed,
//       this function deletes any device dependent objects.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::DeleteDeviceObjects()
{
    m_pFont->DeleteDeviceObjects();
	cmd3Model1->DeleteDeviceObjects();

   return S_OK;
}

//-----------------------------------------------------------------------------
// Name: FinalCleanup()
// Desc: Called during initial app startup, this function performs all the
//       permanent initialization.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::FinalCleanup()
{
    SAFE_DELETE( m_pFont );
    SAFE_DELETE(cmd3Model1);

  return S_OK;
}

//-----------------------------------------------------------------------------
// Name: MsgProc()
// Desc: Message proc function to handle key and menu input
//-----------------------------------------------------------------------------
LRESULT CMyD3DApplication::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam,
                                    LPARAM lParam )
{
    // Pass mouse messages to the ArcBall so it can build internal matrices
    m_ArcBall.HandleMouseMessages( hWnd, uMsg, wParam, lParam );

    // Trap the context menu
    if( uMsg == WM_CONTEXTMENU )
        return 0;

    if( uMsg == WM_COMMAND )
    {
        // Handle the open file dialog
        if( LOWORD(wParam) == IDM_OPENFILE)
		{
			Pause( TRUE );
			LoadFile(cmd3Model1);
            Pause( FALSE );
		}
	}

    return CD3DApplication::MsgProc( hWnd, uMsg, wParam, lParam );
}

//-----------------------------------------------------------------------------
// Name: LoadFile()
// Desc: Uses Windows' OpenFileName dialog to get the name of an X file to
//       load, then proceeds to load that file.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::LoadFile(CMD3Model *model)
{
    TCHAR strCurrentName[512] = "*.md3";

    OPENFILENAME ofn = { sizeof(OPENFILENAME), m_hWnd, NULL,
                         "MD3 Files (*.md3)\0*.md3\0\0",
                         NULL, 0, 1, strCurrentName, 512, m_strFileName, 512,
                         m_strInitialDir, "Open MD3 File", OFN_FILEMUSTEXIST, 0, 1,
                         ".md3", 0, NULL, NULL };

    // Run the OpenFileName dialog.
    if( FALSE == GetOpenFileName( &ofn ) )
        return E_FAIL;

    // Store the initial directory for next time
    strcpy (m_strInitialDir, strCurrentName );
    strstr (m_strInitialDir, m_strFileName )[0] = '\0';

    if( FAILED (model->CreateModel(m_strFileName, m_pd3dDevice) ) )
    {
        MessageBox( NULL, TEXT("Error loading specified MD3 file"),
                    TEXT("MD3 Viewer"), MB_OK|MB_ICONERROR );
        return E_FAIL;
    }

	// Return successful
   return S_OK;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人7777| 欧美日韩黄色影视| 欧美三区在线视频| 国产欧美久久久精品影院| 亚洲国产精品麻豆| 成人免费毛片嘿嘿连载视频| 欧美男男青年gay1069videost| 国产欧美va欧美不卡在线| 午夜精品影院在线观看| 972aa.com艺术欧美| 26uuu国产一区二区三区| 天天综合日日夜夜精品| 色综合久久88色综合天天6| 久久久精品影视| 日韩中文欧美在线| 成人av电影免费观看| 精品99999| 亚洲成av人片一区二区三区| 91美女片黄在线| 国产精品午夜春色av| 国产一区欧美二区| 日韩欧美一区中文| 天堂一区二区在线免费观看| 欧美性猛交xxxx黑人交| 一区二区三区免费在线观看| 欧美日韩精品免费观看视频| 亚洲精品视频免费观看| 91亚洲资源网| 中文字幕日本不卡| 99久久精品国产毛片| 日韩一区在线看| av影院午夜一区| 国产精品久久久久久久久久免费看 | 久久一区二区三区国产精品| 麻豆精品视频在线观看免费 | 91蝌蚪国产九色| 中文字幕一区二区三区乱码在线| av在线这里只有精品| 中文字幕人成不卡一区| 色婷婷久久综合| 亚洲图片一区二区| 欧美理论在线播放| 日本欧美韩国一区三区| 精品国产欧美一区二区| 国产九九视频一区二区三区| 国产精品日韩精品欧美在线| 99久久精品99国产精品| 亚洲在线免费播放| 欧美日韩一区二区三区四区| 麻豆成人av在线| 国产精品日产欧美久久久久| 一本色道久久综合亚洲精品按摩| 一区二区三区四区不卡在线 | 日韩欧美的一区| 久久精品国产精品亚洲红杏| 国产亚洲精久久久久久| 91视频观看视频| 夜色激情一区二区| 欧美成人猛片aaaaaaa| 成人av集中营| 亚洲超碰精品一区二区| 久久久久9999亚洲精品| 欧美在线免费视屏| 狠狠久久亚洲欧美| 亚洲三级理论片| 欧美一区二区三区视频免费| 成人av网站在线观看| 日韩精品一区第一页| 久久蜜桃av一区精品变态类天堂| 色综合亚洲欧洲| 久久99久国产精品黄毛片色诱| 中文字幕巨乱亚洲| 欧美日本韩国一区二区三区视频| 国产精品123| 五月天激情小说综合| 国产欧美一区二区三区鸳鸯浴| 欧洲一区二区三区在线| 国产精品一级在线| 五月综合激情婷婷六月色窝| 中文字幕av一区二区三区免费看| 在线观看日韩电影| 懂色av中文字幕一区二区三区| 日韩不卡免费视频| 亚洲欧美视频一区| 久久麻豆一区二区| 91麻豆精品国产91久久久使用方法 | 青娱乐精品视频在线| 国产精品久久777777| 欧美不卡在线视频| 欧美亚洲图片小说| 99久久夜色精品国产网站| 免费黄网站欧美| 亚洲国产日日夜夜| 椎名由奈av一区二区三区| 26uuu精品一区二区三区四区在线| 欧美日韩成人在线| 色婷婷久久99综合精品jk白丝| 国产成人综合网站| 久久国产剧场电影| 免费精品视频最新在线| 日日摸夜夜添夜夜添亚洲女人| 亚洲自拍偷拍图区| 亚洲视频网在线直播| 国产精品久久久久久久久动漫| 久久综合久久99| 精品欧美乱码久久久久久1区2区| 91麻豆精品国产| 欧美精品欧美精品系列| 欧美日韩一二区| 91黄色激情网站| 色吊一区二区三区| 91久久一区二区| 在线观看国产精品网站| 在线观看视频一区二区欧美日韩 | 国产高清成人在线| 韩国一区二区视频| 国产在线一区观看| 国产老妇另类xxxxx| 国产传媒一区在线| 成人黄色777网| av成人动漫在线观看| aaa欧美大片| 色偷偷88欧美精品久久久| 在线视频欧美区| 欧美日韩一级二级三级| 91精品国产一区二区三区香蕉| 91精品久久久久久久久99蜜臂| 日韩欧美另类在线| 国产欧美视频一区二区三区| 中文字幕一区免费在线观看| 最新日韩av在线| 午夜a成v人精品| 精品午夜一区二区三区在线观看| 国产另类ts人妖一区二区| 成人看片黄a免费看在线| 色婷婷综合在线| 欧美一区2区视频在线观看| 久久免费国产精品| 亚洲欧美成人一区二区三区| 天涯成人国产亚洲精品一区av| 麻豆成人在线观看| 粉嫩在线一区二区三区视频| 色一区在线观看| 欧美一区二区三区的| 国产亚洲精品bt天堂精选| 亚洲精品成人悠悠色影视| 美女精品一区二区| 不卡电影一区二区三区| 在线成人午夜影院| 国产亚洲一本大道中文在线| 亚洲理论在线观看| 麻豆精品一区二区三区| 91丨porny丨中文| 欧美一区二区播放| 亚洲丝袜自拍清纯另类| 日韩国产一二三区| av一二三不卡影片| 日韩欧美国产高清| 亚洲黄网站在线观看| 国产九色sp调教91| 9191精品国产综合久久久久久 | 99精品视频一区二区三区| 欧美高清精品3d| 中文字幕一区视频| 九九久久精品视频| 欧美三级蜜桃2在线观看| 国产欧美va欧美不卡在线| 奇米精品一区二区三区在线观看一| 东方aⅴ免费观看久久av| 欧美一区日韩一区| 一区二区三区日韩欧美精品| 国产99久久久久久免费看农村| 欧美日本一区二区| 亚洲美女视频在线| 成人小视频免费观看| 久久影院电视剧免费观看| 日韩不卡手机在线v区| 欧美性大战xxxxx久久久| 国产精品久久久久久亚洲毛片| 国产一区二区三区在线观看免费视频| 欧美精品三级日韩久久| 一区二区三区精密机械公司| 成人精品在线视频观看| 国产性天天综合网| 国产一区二区三区不卡在线观看| 91精品国产色综合久久不卡蜜臀 | 亚洲欧洲日韩av| 国产精品一色哟哟哟| 精品少妇一区二区三区免费观看| 亚洲高清免费在线| 欧洲国产伦久久久久久久| 亚洲女人****多毛耸耸8| av电影天堂一区二区在线观看| 欧美韩日一区二区三区| 国产91精品一区二区麻豆网站| 337p日本欧洲亚洲大胆色噜噜| 奇米综合一区二区三区精品视频| 欧美老年两性高潮| 肉肉av福利一精品导航| 日韩一卡二卡三卡|