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

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

?? bumpearth.cpp

?? VC++視頻開發實例集錦(包括“遠程視頻監控”"語音識別系統"等13個經典例子)
?? 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一区二区三区免费野_久草精品视频
久久这里只精品最新地址| 中日韩av电影| 99国产精品国产精品毛片| 午夜久久福利影院| 国产精品丝袜91| 日韩视频免费观看高清完整版| 成人激情小说网站| 免费人成网站在线观看欧美高清| 中文字幕日本乱码精品影院| 日韩西西人体444www| 欧美影视一区在线| caoporn国产一区二区| 国内精品国产成人国产三级粉色| 亚洲与欧洲av电影| 亚洲欧美另类在线| 中文成人综合网| 久久亚洲影视婷婷| 日韩久久免费av| 555www色欧美视频| 在线亚洲精品福利网址导航| aaa亚洲精品| 成+人+亚洲+综合天堂| 国产成人在线观看| 韩国欧美国产1区| 另类小说色综合网站| 日韩高清电影一区| 亚洲成人av一区二区| 亚洲在线视频一区| 樱花草国产18久久久久| 亚洲桃色在线一区| 中文字幕在线不卡视频| 欧美激情一区二区在线| 欧美精品一区二区久久婷婷| 欧美变态口味重另类| 日韩一区二区不卡| 日韩精品一区二区三区中文不卡| 欧美二区三区的天堂| 91精品国产91久久久久久最新毛片| 欧美午夜影院一区| 欧美中文字幕亚洲一区二区va在线| 一本色道亚洲精品aⅴ| 99国产精品国产精品久久| 91在线播放网址| 成人一级片网址| 99久久综合精品| 99国产一区二区三精品乱码| 91免费版在线| 日本韩国一区二区三区视频| 91福利视频久久久久| 欧洲中文字幕精品| 91精品在线免费观看| 欧美变态tickle挠乳网站| 亚洲精品在线电影| 日本一二三不卡| 亚洲男人天堂av| 亚洲一区二区三区四区的 | 亚洲乱码中文字幕综合| 亚洲黄色尤物视频| 亚洲sss视频在线视频| 麻豆精品久久精品色综合| 国产精品一二三在| 91在线观看免费视频| 91精品啪在线观看国产60岁| 久久久噜噜噜久久中文字幕色伊伊| 国产欧美日韩在线观看| 一区二区三区美女| 蜜桃精品在线观看| 懂色av中文一区二区三区| 欧洲激情一区二区| 精品噜噜噜噜久久久久久久久试看| 中文字幕国产一区| 丝袜亚洲精品中文字幕一区| 激情成人午夜视频| 色婷婷一区二区三区四区| 91精品国产综合久久小美女| 国产亚洲欧美在线| 亚洲成人午夜电影| 国产呦萝稀缺另类资源| 在线免费不卡视频| 日韩精品一区二区三区视频在线观看 | www.亚洲人| 精品视频在线免费看| 国产丝袜美腿一区二区三区| 亚洲尤物视频在线| 国产激情一区二区三区四区| 色吧成人激情小说| ww久久中文字幕| 亚洲第一主播视频| 国产美女视频91| 欧美精品一级二级三级| 国产日韩欧美精品综合| 日韩精品成人一区二区在线| 99riav久久精品riav| 日韩三级在线观看| 日韩伦理av电影| 乱一区二区av| 欧美日韩国产美女| 国产精品毛片无遮挡高清| 伦理电影国产精品| 欧美日韩在线播放一区| 自拍偷拍亚洲激情| 国产精品一区一区三区| 欧美丰满少妇xxxxx高潮对白| 久久久久久久久久电影| 日本欧美一区二区三区乱码| 一本大道av一区二区在线播放| 精品国产乱码久久久久久1区2区 | 欧美一区二区三区在线观看视频| 亚洲国产精品av| 久久se精品一区精品二区| 欧美少妇xxx| 亚洲另类一区二区| av日韩在线网站| 久久久久久久综合狠狠综合| 日本va欧美va精品发布| 欧洲精品视频在线观看| 亚洲丝袜美腿综合| 国产精品99久久久久久久女警| 欧美mv和日韩mv的网站| 日日骚欧美日韩| 色综合咪咪久久| 亚洲欧洲精品天堂一级| 成人精品gif动图一区| 精品国产3级a| 激情五月激情综合网| 日韩欧美国产系列| 欧美aaaaa成人免费观看视频| 欧美精品99久久久**| 日韩中文字幕91| 欧美视频一区在线| 夜夜嗨av一区二区三区网页| 色94色欧美sute亚洲线路二| 亚洲图片你懂的| 色综合色狠狠天天综合色| 樱花草国产18久久久久| 欧美亚洲日本一区| 午夜精品视频一区| 777xxx欧美| 麻豆91精品91久久久的内涵| 欧美电影免费观看高清完整版| 精品影视av免费| 久久久www成人免费毛片麻豆| 国产伦精品一区二区三区免费迷 | 日韩影院精彩在线| 91精品国产综合久久婷婷香蕉| 奇米精品一区二区三区在线观看一| 91精品一区二区三区久久久久久 | 一区二区成人在线观看| 欧美三级一区二区| 日韩电影免费一区| 久久青草欧美一区二区三区| 国产一区二三区| 国产精品久久久久久久久图文区| 99久久国产综合精品女不卡| 亚洲综合在线免费观看| 欧美日韩国产综合视频在线观看 | 亚洲成人免费观看| 日韩一级欧美一级| 国产99久久久国产精品| 亚洲激情第一区| 日韩午夜激情免费电影| 国产成人亚洲综合a∨婷婷| 亚洲品质自拍视频| 3751色影院一区二区三区| 国产一区二区三区在线看麻豆| 国产精品国产三级国产aⅴ原创| 日本精品视频一区二区三区| 日韩成人午夜精品| 国产亚洲欧美日韩在线一区| 欧美在线免费播放| 免费观看一级欧美片| 国产精品国产三级国产| 67194成人在线观看| 懂色av一区二区三区免费观看| 亚洲乱码国产乱码精品精小说| 欧美一区日本一区韩国一区| 成人av在线电影| 天堂av在线一区| 国产精品欧美久久久久无广告 | 欧美一区二区三区视频| 国产91在线观看丝袜| 偷拍一区二区三区四区| 国产三级一区二区| 欧美日韩国产一级| 成人一二三区视频| 免费成人av在线播放| 亚洲精品亚洲人成人网在线播放| 日韩你懂的在线播放| 91久久精品一区二区三| 国产一区二区三区黄视频| 亚洲成人精品一区| 国产日韩欧美精品电影三级在线| 精品视频一区三区九区| 成人免费视频视频在线观看免费| 午夜精品免费在线| 自拍偷拍亚洲综合| 国产亚洲欧美日韩俺去了| 日韩一二三区不卡| 欧美少妇一区二区| 91在线观看视频|