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

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

?? bumpearth.cpp

?? < VC++視頻音頻開發>> 這本書的源碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//-----------------------------------------------------------------------------
// File: BumpEarth.cpp
//
// Desc: Direct3D 環境貼圖/凹凸貼圖 實例。
//-----------------------------------------------------------------------------
#define STRICT
#include <Windows.h>
#include <commctrl.h>
#include <math.h>
#include <stdio.h>
#include <D3DX9.h>
#include "DXUtil.h"
#include "D3DEnumeration.h"
#include "D3DSettings.h"
#include "D3DApp.h"
#include "D3DFile.h"
#include "D3DFont.h"
#include "D3DUtil.h"
#include "resource.h"

//-----------------------------------------------------------------------------
// 定義,常量,全局變量聲明
//-----------------------------------------------------------------------------

// Vertex 數據結構,bumpmapped environment map使用
struct BUMPVERTEX
{
    D3DXVECTOR3 p;
    D3DXVECTOR3 n;
    FLOAT       tu1, tv1;
    FLOAT       tu2, tv2;

        static const DWORD FVF;
};
const DWORD BUMPVERTEX::FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX2;

// 將FLOAT轉換為DWORD,在SetRenderState()調用中將用到
inline DWORD F2DW( FLOAT f ) { return *((DWORD*)&f); }




//-----------------------------------------------------------------------------
// Name: class CMyD3DApplication
// Desc:  
//-----------------------------------------------------------------------------
class CMyD3DApplication : public CD3DApplication
{
    CD3DFont*     m_pFont;                  //用于輸出文本

    CD3DArcBall   m_ArcBall;                //用于鼠標輸入

    LPDIRECT3DTEXTURE9 m_pBlockTexture;    //黑,灰紋理
    LPDIRECT3DTEXTURE9 m_pEarthTexture;     //地表紋理
    LPDIRECT3DTEXTURE9 m_pEnvMapTexture;    //環境貼圖
    LPDIRECT3DTEXTURE9 m_pEarthBumpTexture; //凹凸貼圖資源
    LPDIRECT3DTEXTURE9 m_psBumpMap;         //實際的凹凸貼圖
    CD3DMesh* m_pSkyBox;
    LPDIRECT3DTEXTURE9 m_pDispMapTexture;   //偏移貼圖紋理
    IDirect3DVertexShader9* m_pDispMapBumpShader;//偏移貼圖+凹凸貼圖著色
    IDirect3DVertexShader9* m_pDispMapShader;    //偏移貼圖+無凹凸貼圖著色
    IDirect3DVertexDeclaration9*   m_pDispMapVertexDecl;


    D3DXMATRIXA16 m_matWorld;
    D3DXMATRIXA16 m_matView;
    D3DXMATRIXA16 m_matProj;

    D3DFORMAT     m_BumpMapFormat;         //凹凸貼圖紋理格式
    LPDIRECT3DVERTEXBUFFER9 m_pEarthVB;   //地球幾何體
    DWORD         m_dwNumSphereVertices;

    BOOL          m_bHighTesselation;      //用戶選項
    BOOL          m_bTextureOn;
    BOOL          m_bBumpMapOn;
    BOOL          m_bEnvMapOn;
    BOOL          m_bDeviceValidationFailed;
    BOOL          m_bDispMapOn;            //偏移貼圖開關
    BOOL          m_bCanDoDispMap;

    VOID    SetMenuStates();
    HRESULT CreateEarthVertexBuffer();
    VOID    ApplyEnvironmentMap();
    HRESULT InitBumpMap();

protected:
    HRESULT OneTimeSceneInit();
    HRESULT InitDeviceObjects();
    HRESULT RestoreDeviceObjects();
    HRESULT InvalidateDeviceObjects();
    HRESULT DeleteDeviceObjects();
    HRESULT Render();
    HRESULT FrameMove();
    HRESULT FinalCleanup();
    HRESULT ConfirmDevice( D3DCAPS9*, DWORD, D3DFORMAT, D3DFORMAT );

public:
    CMyD3DApplication();

    LRESULT MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
};




//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: 程序入口。進行全部的初始化工作,然后進入消息處理循環,空閑時間被用來
//       進行渲染
//-----------------------------------------------------------------------------
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
    CMyD3DApplication d3dApp;

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

    return d3dApp.Run();
}




//-----------------------------------------------------------------------------
// Name: CMyD3DApplication()
// Desc: 
//-----------------------------------------------------------------------------
CMyD3DApplication::CMyD3DApplication()
{
    m_strWindowTitle    = _T("BumpEarth: Direct3D BumpMapping Demo");
    m_d3dEnumeration.AppUsesDepthBuffer = TRUE;
    m_bShowCursorWhenFullscreen = TRUE;

    m_psBumpMap         = NULL;
    m_bTextureOn        = TRUE;
    m_bBumpMapOn        = TRUE;
    m_bEnvMapOn         = TRUE;
    m_bHighTesselation  = TRUE;
    m_bDispMapOn        = FALSE;
    m_bCanDoDispMap     = FALSE;

    m_pDispMapShader    = NULL;
    m_pDispMapBumpShader= NULL;
    m_pDispMapVertexDecl= NULL;
    m_pDispMapTexture   = NULL;
    m_pBlockTexture     = NULL;
    m_pEarthTexture     = NULL;
    m_pEarthBumpTexture = NULL;
    m_pEnvMapTexture    = NULL;
    m_pSkyBox           = NULL;
    m_bDeviceValidationFailed = FALSE;


    m_pFont             = new CD3DFont( _T("Arial"), 12, D3DFONT_BOLD );
    m_pEarthVB          = NULL;
}




//-----------------------------------------------------------------------------
// Name: OneTimeSceneInit()
// Desc: 在初始程序開始時調用。此函數進行所有常設值得初始化
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::OneTimeSceneInit()
{
    // 設置指針使用戶可以用鼠標移動目標
#ifdef _WIN64
    SetClassLongPtr( m_hWnd, GCLP_HCURSOR, (LONG_PTR)LoadCursor( NULL, IDC_SIZEALL ) );
#else
    SetClassLong( m_hWnd, GCL_HCURSOR, HandleToLong( LoadCursor( NULL, IDC_SIZEALL ) ) );
#endif

    m_pSkyBox      = new CD3DMesh();
    if( m_pSkyBox == NULL )
        return E_OUTOFMEMORY;

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: ApplyEnvironmentMap()
// Desc: 計算每個頂點的法向,從而決定環境貼圖對應的紋理
//-----------------------------------------------------------------------------
VOID CMyD3DApplication::ApplyEnvironmentMap()
{
    D3DXMATRIXA16 matWorldView;
    D3DXMatrixMultiply( &matWorldView, &m_matWorld, &m_matView );

    
    BUMPVERTEX* vtx;
    m_pEarthVB->Lock( 0, 0, (void**)&vtx, 0 );

    DWORD dwNumSphereRings    = m_bHighTesselation ? 15 :  5;
    DWORD dwNumSphereSegments = m_bHighTesselation ? 30 : 10;
    FLOAT fDeltaRingAngle = ( D3DX_PI / dwNumSphereRings );
    FLOAT fDeltaSegAngle  = ( 2.0f * D3DX_PI / dwNumSphereSegments );

    D3DXVECTOR4 vT;
    FLOAT fScale;

   for( DWORD ring = 0; ring < dwNumSphereRings; ring++ )
    {
        FLOAT r0 = sinf( (ring+0) * fDeltaRingAngle );
        FLOAT r1 = sinf( (ring+1) * fDeltaRingAngle );
        FLOAT y0 = cosf( (ring+0) * fDeltaRingAngle );
        FLOAT y1 = cosf( (ring+1) * fDeltaRingAngle );

        for( DWORD seg = 0; seg < (dwNumSphereSegments+1); seg++ )
        {
            FLOAT x0 =  r0 * sinf( seg * fDeltaSegAngle );
            FLOAT z0 =  r0 * cosf( seg * fDeltaSegAngle );
            FLOAT x1 =  r1 * sinf( seg * fDeltaSegAngle );
            FLOAT z1 =  r1 * cosf( seg * fDeltaSegAngle );

            (*vtx).p   = (*vtx).n   = D3DXVECTOR3(x0,y0,z0);
            (*vtx).tu2 = 1.0f - ((FLOAT)seg) / dwNumSphereSegments;
            (*vtx).tv2 = (ring+0) / (FLOAT)dwNumSphereRings;
            D3DXVec3Transform( &vT, &(*vtx).n, &matWorldView );
            fScale = 1.37f / D3DXVec4Length( &vT );
            (*vtx).tu1 = 0.5f + fScale*vT.x;
            (*vtx).tv1 = 0.5f - fScale*vT.y;
            vtx++;

            (*vtx).p   = (*vtx).n   = D3DXVECTOR3(x1,y1,z1);
            (*vtx).tu2 = 1.0f - ((FLOAT)seg) / dwNumSphereSegments;
            (*vtx).tv2 = (ring+1) / (FLOAT)dwNumSphereRings;
            D3DXVec3Transform( &vT, &(*vtx).n, &matWorldView );
            fScale = 1.37f / D3DXVec4Length( &vT );
            (*vtx).tu1 = 0.5f + fScale*vT.x;
            (*vtx).tv1 = 0.5f - fScale*vT.y;
            vtx++;
        }
    }

    m_pEarthVB->Unlock();
}




//-----------------------------------------------------------------------------
// Name: FrameMove()
// Desc: 
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::FrameMove()
{
    static FLOAT fRotationAngle = 0.0f;
    if( FALSE == m_ArcBall.IsBeingDragged() )
        fRotationAngle += m_fElapsedTime;

    D3DXMatrixRotationY( &m_matWorld, -fRotationAngle );
    D3DXMatrixMultiply( &m_matWorld, &m_matWorld, m_ArcBall.GetRotationMatrix() );
    D3DXMatrixMultiply( &m_matWorld, &m_matWorld, m_ArcBall.GetTranslationMatrix() );

    D3DXVECTOR3 vEyePt    = D3DXVECTOR3( 0.0f, 0.0f, -3.0f );
    D3DXVECTOR3 vLookatPt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
    D3DXVECTOR3 vUpVec    = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
    D3DXMatrixLookAtLH( &m_matView, &vEyePt, &vLookatPt, &vUpVec );

    ApplyEnvironmentMap();

    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: Render()
// Desc: 
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::Render()
{

    if( FAILED( m_pd3dDevice->BeginScene() ) )
        return S_OK; 

    {
        D3DXMATRIXA16 matWorldSkybox;
        D3DXMatrixScaling( &matWorldSkybox, 10.0f, 10.0f, 10.0f );
        m_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorldSkybox );

        D3DXMATRIXA16 matViewSkybox = m_matView;
        matViewSkybox._41 = matViewSkybox._42 = matViewSkybox._43 = 0.0f;
        m_pd3dDevice->SetTransform( D3DTS_VIEW, &matViewSkybox );

        m_pd3dDevice->SetRenderState( D3DRS_WRAP0, 0 );
        m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
        m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
        if( (m_d3dCaps.TextureAddressCaps & D3DPTADDRESSCAPS_MIRROR) == D3DPTADDRESSCAPS_MIRROR )
        {

            m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSU,  D3DTADDRESS_MIRROR );
            m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSV,  D3DTADDRESS_MIRROR );
        }
        m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
        m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1 );
        m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
        m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP,   D3DTOP_SELECTARG1 );
        m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE );
        m_pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_DISABLE );

        m_pd3dDevice->SetRenderState( D3DRS_ZFUNC, D3DCMP_ALWAYS );
        m_pSkyBox->Render( m_pd3dDevice );

        m_pd3dDevice->SetRenderState( D3DRS_ZFUNC, D3DCMP_LESSEQUAL );
        m_pd3dDevice->SetTransform( D3DTS_WORLD, &m_matWorld );
        m_pd3dDevice->SetTransform( D3DTS_VIEW, &m_matView );
    }


    m_pd3dDevice->SetRenderState( D3DRS_WRAP0, D3DWRAP_U | D3DWRAP_V );
    m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
    m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
    m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
    m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
    m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
    m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE );

    if( m_bTextureOn )
        m_pd3dDevice->SetTexture( 0, m_pEarthTexture );
    else
        m_pd3dDevice->SetTexture( 0, m_pBlockTexture );

    if( m_bDispMapOn )
    {
        m_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0 );
        m_pd3dDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 1 );
        m_pd3dDevice->SetTextureStageState( 2, D3DTSS_TEXCOORDINDEX, 2 );
        m_pd3dDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_NONE);

        m_pd3dDevice->SetSamplerState(D3DDMAPSAMPLER, D3DSAMP_MIPFILTER, D3DTEXF_NONE);
        m_pd3dDevice->SetSamplerState(D3DDMAPSAMPLER, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
        m_pd3dDevice->SetSamplerState(D3DDMAPSAMPLER, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人欧美一区二区三区视频网页| 欧美自拍偷拍午夜视频| 亚洲精品一区二区三区四区高清| 免费看日韩精品| 精品福利一区二区三区| 国产成人免费xxxxxxxx| 国产精品色在线| 欧美性大战久久| 日本视频在线一区| 久久亚洲综合色一区二区三区| 国产精品一区二区视频| 18成人在线视频| 欧美日韩精品欧美日韩精品| 免费观看在线综合| 国产精品久久久久精k8| 在线这里只有精品| 精一区二区三区| 亚洲图片你懂的| 制服丝袜av成人在线看| 国产精品99久久久久久久女警| 亚洲男人的天堂一区二区| 欧美日韩午夜在线| 国产毛片精品视频| 亚洲女同女同女同女同女同69| 欧美一区二区三区系列电影| 国产精品一区二区久久精品爱涩 | 久久精品久久久精品美女| 国产亚洲精品免费| 在线观看www91| 国产一区二区毛片| 一区二区在线免费观看| 精品国产乱码久久久久久1区2区| 丁香激情综合国产| 日韩黄色在线观看| 成人欧美一区二区三区白人| 欧亚一区二区三区| 国产成人超碰人人澡人人澡| 亚洲成人免费观看| 中文字幕国产一区| 日韩精品一区在线观看| 91无套直看片红桃| 极品美女销魂一区二区三区免费| 中文字幕一区二区三区视频| 欧美一区二区福利视频| 91美女在线视频| 国产精品99久久久久| 天天综合天天综合色| 亚洲丝袜制服诱惑| 欧美激情综合在线| 精品欧美黑人一区二区三区| 欧美亚洲一区二区在线观看| 波多野结衣中文字幕一区二区三区| 午夜视频一区二区三区| 亚洲天堂福利av| 欧美国产日韩精品免费观看| 精品国产91洋老外米糕| 欧美精品aⅴ在线视频| 色婷婷av久久久久久久| 国产一区二区视频在线| 日本不卡一区二区三区| 亚洲综合视频网| 亚洲欧美日韩国产另类专区| 国产精品青草综合久久久久99| 精品日韩99亚洲| 日韩欧美色综合网站| 欧美日韩国产影片| 欧美日韩五月天| 欧美中文字幕亚洲一区二区va在线 | 日本vs亚洲vs韩国一区三区二区| 国产精品青草久久| 精品电影一区二区| 欧美高清视频不卡网| 99re视频这里只有精品| 美女网站在线免费欧美精品| 亚洲一级片在线观看| 亚洲欧美在线另类| 欧美国产综合色视频| 国产三级三级三级精品8ⅰ区| 日韩精品在线一区| 欧美男男青年gay1069videost| 国产高清无密码一区二区三区| 青娱乐精品视频在线| 亚洲午夜精品在线| 一区二区三区中文字幕电影| 亚洲欧洲精品天堂一级| 中文字幕欧美国产| 国产嫩草影院久久久久| 久久精品视频在线免费观看 | 午夜一区二区三区在线观看| 最近日韩中文字幕| 中文字幕一区二区三区乱码在线| 欧美大尺度电影在线| 欧美一区二区在线免费播放| 欧美视频一区二区在线观看| 欧美综合亚洲图片综合区| 在线一区二区三区四区五区 | 国产日韩精品久久久| 精品91自产拍在线观看一区| 精品99一区二区| 久久亚洲影视婷婷| 欧美极品aⅴ影院| 一区精品在线播放| 亚洲国产aⅴ成人精品无吗| 亚洲国产日韩一级| 肉色丝袜一区二区| 麻豆国产一区二区| 国产久卡久卡久卡久卡视频精品| 国产盗摄视频一区二区三区| kk眼镜猥琐国模调教系列一区二区| 91在线看国产| 欧美日韩三级一区| 欧美成人免费网站| 中文字幕av一区二区三区免费看| 亚洲精品一区二区三区福利| 欧美激情一区三区| 亚洲欧美色图小说| 夜夜夜精品看看| 亚洲1区2区3区4区| 极品美女销魂一区二区三区免费 | 91精品欧美综合在线观看最新 | 欧美一级片在线| xnxx国产精品| 国产精品成人午夜| 午夜久久久久久| 国产激情偷乱视频一区二区三区| 91浏览器在线视频| 99久久精品免费看| 亚洲精品一区在线观看| 中文字幕一区二区不卡| 午夜精品福利一区二区三区av | 色综合久久久久久久| 制服视频三区第一页精品| 国产日韩欧美一区二区三区乱码| 亚洲综合一二区| 国产成人啪免费观看软件| 白白色亚洲国产精品| 欧美大尺度电影在线| 国产精品夫妻自拍| 老司机免费视频一区二区三区| av电影在线观看完整版一区二区| 欧美三级在线播放| 国产日韩欧美电影| 亚洲国产视频一区| 色域天天综合网| 久久久无码精品亚洲日韩按摩| 亚洲一区二区五区| 国产福利一区二区三区视频 | 91精品国产综合久久福利| 国产欧美精品日韩区二区麻豆天美| 亚洲国产日韩精品| 99久久国产综合色|国产精品| 欧美日韩国产精品成人| 国产精品视频免费看| 久草这里只有精品视频| 欧美日韩视频不卡| 亚洲欧洲综合另类| 国产91精品一区二区麻豆亚洲| 色88888久久久久久影院按摩| 国产精品久久久久久亚洲伦| 九色综合狠狠综合久久| 欧美日韩国产片| 一区二区三区四区视频精品免费 | 欧美一区二区视频网站| 中文字幕日本不卡| 粉嫩av亚洲一区二区图片| 日韩视频中午一区| 亚洲国产视频网站| 91久久国产最好的精华液| 中文字幕在线观看不卡视频| 国产高清精品在线| 欧美一区午夜精品| 久久www免费人成看片高清| 欧美男生操女生| 午夜精品在线视频一区| 在线精品国精品国产尤物884a| 亚洲人成网站在线| 97精品久久久午夜一区二区三区 | 樱桃国产成人精品视频| 99精品桃花视频在线观看| 国产午夜久久久久| 懂色av噜噜一区二区三区av| 26uuu色噜噜精品一区| 美女视频黄免费的久久| 欧美精品乱码久久久久久按摩 | 欧美哺乳videos| 国内精品不卡在线| 日韩久久久久久| 国产宾馆实践打屁股91| 中文文精品字幕一区二区| 懂色一区二区三区免费观看| 国产亚洲综合色| 不卡一区二区在线| 亚洲日穴在线视频| 欧美亚洲国产一区二区三区va| 一个色综合av| 欧美系列一区二区| 国内久久精品视频| 一区二区中文字幕在线| 欧美性生活影院| 美女www一区二区|