亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
91精品国产色综合久久ai换脸 | 国产电影一区二区三区| 国产精品国产三级国产普通话三级 | 国产精品一区在线| 亚洲成人久久影院| 国产精品久久久久久福利一牛影视 | 国产一区免费电影| 五月天久久比比资源色| 亚洲国产岛国毛片在线| 日韩精品专区在线影院观看| 色综合久久天天| 国产一区啦啦啦在线观看| 亚洲成人自拍网| 成人免费一区二区三区视频 | 成人av免费网站| 美国十次综合导航| 亚洲在线成人精品| 中文字幕成人av| 久久免费国产精品| 欧美一区二区三区四区高清| 日本高清成人免费播放| 9久草视频在线视频精品| 久久99久国产精品黄毛片色诱| 亚洲午夜av在线| 亚洲欧美区自拍先锋| 国产欧美一区二区精品忘忧草| 日韩欧美一级二级三级| 欧美精三区欧美精三区| 欧美三级电影网站| 在线观看成人小视频| 色偷偷久久人人79超碰人人澡| 大白屁股一区二区视频| 国产精品一线二线三线精华| 青青草国产成人av片免费| 亚洲午夜电影在线观看| 亚洲精品伦理在线| 中文字幕一区二区不卡| 中文字幕亚洲在| 国产精品无圣光一区二区| 亚洲国产精品ⅴa在线观看| 欧美国产日韩一二三区| 国产欧美一区二区三区在线老狼| 国产午夜一区二区三区| 久久久久久久久蜜桃| 久久精品视频免费| 国产精品色眯眯| 国产精品国模大尺度视频| 国产精品成人一区二区三区夜夜夜| 国产亚洲欧美一区在线观看| 国产网站一区二区| 国产精品黄色在线观看| 国产精品国产三级国产普通话三级| 国产精品久久午夜| 亚洲视频一区在线观看| 亚洲香肠在线观看| 亚洲成人av一区二区三区| 免费人成精品欧美精品| 狠狠色狠狠色综合日日91app| 五月婷婷综合在线| 久久精品久久99精品久久| 紧缚奴在线一区二区三区| 国内精品不卡在线| 成人avav在线| 欧美在线视频你懂得| 91精品国产色综合久久不卡电影| 精品日韩成人av| 国产人妖乱国产精品人妖| 亚洲欧洲成人精品av97| 午夜国产精品一区| 国产在线精品不卡| 色综合久久久久久久久| 在线不卡免费欧美| 久久久久久久综合狠狠综合| 国产精品第四页| 亚洲成av人片| 国产一区二区三区四区在线观看| 成人免费看黄yyy456| 欧美性猛交xxxxxx富婆| 亚洲精品一区二区三区福利 | 久久精品国产99| av一区二区三区在线| 欧美日韩一区不卡| 久久综合色播五月| 亚洲日韩欧美一区二区在线| 日韩电影在线观看一区| 高清久久久久久| 9191精品国产综合久久久久久| 国产香蕉久久精品综合网| 一区二区三区不卡视频| 精品在线观看视频| 91久久久免费一区二区| 26uuu国产在线精品一区二区| 综合av第一页| 久久99精品国产91久久来源| 一本久久a久久免费精品不卡| 8x8x8国产精品| 国产精品短视频| 免费看黄色91| 在线观看视频一区| 久久精品亚洲麻豆av一区二区| 亚洲国产中文字幕| 成人免费毛片aaaaa**| 9191成人精品久久| 一区二区三区在线不卡| 国产在线精品一区在线观看麻豆| 91免费在线看| 国产亚洲精品bt天堂精选| 日韩电影在线一区二区三区| 91在线看国产| 久久蜜桃av一区二区天堂 | 粉嫩av一区二区三区粉嫩| 91精品午夜视频| 亚洲综合无码一区二区| 国产精品1区2区3区| 欧美一级在线免费| 亚洲国产视频a| 一本一道久久a久久精品 | 中文av一区二区| 精品在线播放午夜| 欧美一区二区福利在线| 亚洲国产精品久久不卡毛片| 色老头久久综合| 中文字幕综合网| 国产1区2区3区精品美女| 亚洲精品一区二区三区四区高清 | 九色综合国产一区二区三区| 欧美视频在线播放| 亚洲高清在线视频| 欧美亚洲另类激情小说| 亚洲精品国产精华液| 色综合色综合色综合| 国产精品每日更新| 成人a免费在线看| 亚洲欧美在线视频观看| 成人av免费在线| 国产精品夫妻自拍| 97精品国产露脸对白| 亚洲欧美另类在线| 色哟哟亚洲精品| 国产999精品久久久久久绿帽| 日韩一区二区视频| 麻豆精品新av中文字幕| 欧美tickling挠脚心丨vk| 日本亚洲欧美天堂免费| 91精品国产综合久久精品app| 五月天亚洲精品| 666欧美在线视频| 首页综合国产亚洲丝袜| 欧美精品乱码久久久久久按摩| 性做久久久久久免费观看| 在线不卡a资源高清| 麻豆久久一区二区| 国产三级一区二区三区| 成人小视频在线| 亚洲乱码国产乱码精品精小说 | 99精品热视频| 一区二区在线免费| 欧美男人的天堂一二区| 毛片av中文字幕一区二区| 久久久精品一品道一区| 成人免费毛片app| 亚洲精品高清视频在线观看| 欧美日韩精品一区二区三区四区| 日韩电影在线免费看| 国产亚洲欧美一区在线观看| 97国产精品videossex| 亚洲超碰精品一区二区| 日本va欧美va欧美va精品| 久久伊人蜜桃av一区二区| av在线不卡免费看| 日韩一区精品视频| 久久精品水蜜桃av综合天堂| 91久久国产最好的精华液| 日韩不卡免费视频| 欧美国产日韩亚洲一区| 一本久久a久久免费精品不卡| 美女一区二区视频| 中文欧美字幕免费| 欧美在线观看禁18| 精品一区二区三区在线观看国产| 国产精品久99| 日韩视频免费观看高清完整版在线观看 | 成人一区在线看| 一区二区三区免费在线观看| 日韩亚洲欧美中文三级| 成人av集中营| 奇米色777欧美一区二区| 亚洲丝袜精品丝袜在线| 欧美一级高清大全免费观看| aaa欧美大片| 麻豆精品在线看| 亚洲综合精品久久| 国产午夜亚洲精品理论片色戒 | 亚洲国产精品传媒在线观看| 欧美色偷偷大香| 国产精品一区二区免费不卡| 五月天久久比比资源色| 中文字幕一区免费在线观看| 日韩欧美黄色影院| 欧美视频在线一区二区三区 |