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

隨筆 - 505  文章 - 1034  trackbacks - 0
<2007年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456


子曾經(jīng)曰過:編程無他,唯手熟爾!

常用鏈接

留言簿(94)

隨筆分類(649)

隨筆檔案(505)

相冊

BCB

Crytek

  • crymod
  • Crytek's Offical Modding Portal

Game Industry

OGRE

other

Programmers

Qt

WOW Stuff

搜索

  •  

積分與排名

  • 積分 - 918299
  • 排名 - 14

最新隨筆

最新評論

閱讀排行榜

評論排行榜

紋理映射

效果:


// -----------------------------------------------------------------------------
//  File: Textures.cpp
//
//  Desc: Better than just lights and materials, 3D objects look much more
//        convincing when texture-mapped. Textures can be thought of as a sort
//        of wallpaper, that is shrinkwrapped to fit a texture. Textures are
//        typically loaded from image files, and D3DX provides a utility to
//        function to do this for us. Like a vertex buffer, textures have
//        Lock() and Unlock() functions to access (read or write) the image
//        data. Textures have a width, height, miplevel, and pixel format. The
//        miplevel is for "mipmapped" textures, an advanced performance-
//        enhancing feature which uses lower resolutions of the texture for
//        objects in the distance where detail is less noticeable. The pixel
//        format determines how the colors are stored in a texel. The most
//        common formats are the 16-bit R5G6B5 format (5 bits of red, 6-bits of
//        green and 5 bits of blue) and the 32-bit A8R8G8B8 format (8 bits each
//        of alpha, red, green, and blue).
//
//        Textures are associated with geometry through texture coordinates.
//        Each vertex has one or more sets of texture coordinates, which are
//        named tu and tv and range from 0.0 to 1.0. Texture coordinates can be
//        supplied by the geometry, or can be automatically generated using
//        Direct3D texture coordinate generation (which is an advanced feature).
//
//  Copyright (c) Microsoft Corporation. All rights reserved.
// -----------------------------------------------------------------------------
#include  < Windows.h >
#include 
< mmsystem.h >
#include 
< d3dx9.h >
#pragma warning( disable : 
4996  )  //  disable deprecated warning 
#include  < strsafe.h >
#pragma warning( 
default  :  4996  ) 



// -----------------------------------------------------------------------------
//  Global variables
// -----------------------------------------------------------------------------
LPDIRECT3D9             g_pD3D        =  NULL;  //  Used to create the D3DDevice
LPDIRECT3DDEVICE9       g_pd3dDevice  =  NULL;  //  Our rendering device
LPDIRECT3DVERTEXBUFFER9 g_pVB         =  NULL;  //  Buffer to hold vertices
LPDIRECT3DTEXTURE9      g_pTexture    =  NULL;  //  Our texture

//  A structure for our custom vertex type. We added texture coordinates
struct  CUSTOMVERTEX
{
    D3DXVECTOR3 position; 
//  The position
    D3DCOLOR    color;     //  The color
#ifndef SHOW_HOW_TO_USE_TCI
    FLOAT       tu, tv;   
//  The texture coordinates
#endif
};

//  Our custom FVF, which describes our custom vertex structure
#ifdef SHOW_HOW_TO_USE_TCI
#define  D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)
#else
#define  D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)
#endif



// -----------------------------------------------------------------------------
//  Name: InitD3D()
//  Desc: Initializes Direct3D
// -----------------------------------------------------------------------------
HRESULT InitD3D( HWND hWnd )
{
    
//  Create the D3D object.
     if ( NULL  ==  ( g_pD3D  =  Direct3DCreate9( D3D_SDK_VERSION ) ) )
        
return  E_FAIL;

    
//  Set up the structure used to create the D3DDevice. Since we are now
    
//  using more complex geometry, we will create a device with a zbuffer.
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory( 
& d3dpp,  sizeof (d3dpp) );
    d3dpp.Windowed 
=  TRUE;
    d3dpp.SwapEffect 
=  D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat 
=  D3DFMT_UNKNOWN;
    d3dpp.EnableAutoDepthStencil 
=  TRUE;
    d3dpp.AutoDepthStencilFormat 
=  D3DFMT_D16;

    
//  Create the D3DDevice
     if ( FAILED( g_pD3D -> CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      
& d3dpp,  & g_pd3dDevice ) ) )
    {
        
return  E_FAIL;
    }

    
//  Turn off culling
    g_pd3dDevice -> SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );

    
//  Turn off D3D lighting
    g_pd3dDevice -> SetRenderState( D3DRS_LIGHTING, FALSE );

    
//  Turn on the zbuffer
    g_pd3dDevice -> SetRenderState( D3DRS_ZENABLE, TRUE );

    
return  S_OK;
}




// -----------------------------------------------------------------------------
//  Name: InitGeometry()
//  Desc: Create the textures and vertex buffers
// -----------------------------------------------------------------------------
HRESULT InitGeometry()
{
    
//  Use D3DX to create a texture from a file based image
    
//  從文件創(chuàng)建紋理
     if ( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice,  " banana.bmp " & g_pTexture ) ) )
    {
        
//  If texture is not in current folder, try parent folder
         if ( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice,  " ..\\banana.bmp " & g_pTexture ) ) )
        {
            MessageBox(NULL, 
" Could not find banana.bmp " " Textures.exe " , MB_OK);
            
return  E_FAIL;
        }
    }

    
//  Create the vertex buffer.
     if ( FAILED( g_pd3dDevice -> CreateVertexBuffer(  50 * 2 * sizeof (CUSTOMVERTEX),
                                                  
0 , D3DFVF_CUSTOMVERTEX,
                                                  D3DPOOL_DEFAULT, 
& g_pVB, NULL ) ) )
    {
        
return  E_FAIL;
    }

    
//  Fill the vertex buffer. We are setting the tu and tv texture
    
//  coordinates, which range from 0.0 to 1.0
    CUSTOMVERTEX *  pVertices;
    
if ( FAILED( g_pVB -> Lock(  0 0 , ( void ** ) & pVertices,  0  ) ) )
        
return  E_FAIL;
    
for ( DWORD i = 0 ; i < 50 ; i ++  )
    {
        FLOAT theta 
=  ( 2 * D3DX_PI * i) / ( 50 - 1 );

        pVertices[
2 * i + 0 ].position  =  D3DXVECTOR3( sinf(theta), - 1.0f , cosf(theta) );
        pVertices[
2 * i + 0 ].color     =   0xffffffff ;
#ifndef SHOW_HOW_TO_USE_TCI
        pVertices[
2 * i + 0 ].tu        =  ((FLOAT)i) / ( 50 - 1 );
        pVertices[
2 * i + 0 ].tv        =   1.0f ;
#endif

        pVertices[
2 * i + 1 ].position  =  D3DXVECTOR3( sinf(theta),  1.0f , cosf(theta) );
        pVertices[
2 * i + 1 ].color     =   0xff808080 ;
#ifndef SHOW_HOW_TO_USE_TCI
        pVertices[
2 * i + 1 ].tu        =  ((FLOAT)i) / ( 50 - 1 );
        pVertices[
2 * i + 1 ].tv        =   0.0f ;
#endif
    }
    g_pVB
-> Unlock();

    
return  S_OK;
}




// -----------------------------------------------------------------------------
//  Name: Cleanup()
//  Desc: Releases all previously initialized objects
// -----------------------------------------------------------------------------
VOID Cleanup()
{
    
if ( g_pTexture  !=  NULL )
        g_pTexture
-> Release();

    
if ( g_pVB  !=  NULL )
        g_pVB
-> Release();

    
if ( g_pd3dDevice  !=  NULL )
        g_pd3dDevice
-> Release();

    
if ( g_pD3D  !=  NULL )
        g_pD3D
-> Release();
}



// -----------------------------------------------------------------------------
//  Name: SetupMatrices()
//  Desc: Sets up the world, view, and projection transform matrices.
// -----------------------------------------------------------------------------
VOID SetupMatrices()
{
    
//  Set up world matrix
    D3DXMATRIXA16 matWorld;
    D3DXMatrixIdentity( 
& matWorld );
    D3DXMatrixRotationX( 
& matWorld, timeGetTime() / 1000.0f  );
    g_pd3dDevice
-> SetTransform( D3DTS_WORLD,  & matWorld );

    
//  Set up our view matrix. A view matrix can be defined given an eye point,
    
//  a point to lookat, and a direction for which way is up. Here, we set the
    
//  eye five units back along the z-axis and up three units, look at the
    
//  origin, and define "up" to be in the y-direction.
    D3DXVECTOR3 vEyePt(  0.0f 3.0f , - 5.0f  );
    D3DXVECTOR3 vLookatPt( 
0.0f 0.0f 0.0f  );
    D3DXVECTOR3 vUpVec( 
0.0f 1.0f 0.0f  );
    D3DXMATRIXA16 matView;
    D3DXMatrixLookAtLH( 
& matView,  & vEyePt,  & vLookatPt,  & vUpVec );
    g_pd3dDevice
-> SetTransform( D3DTS_VIEW,  & matView );

    
//  For the projection matrix, we set up a perspective transform (which
    
//  transforms geometry from 3D view space to 2D viewport space, with
    
//  a perspective divide making objects smaller in the distance). To build
    
//  a perpsective transform, we need the field of view (視區(qū))(1/4 pi is common),
    
//  the aspect ratio, and the near and far clipping planes (which define at
    
//  what distances geometry should be no longer be rendered).
    D3DXMATRIXA16 matProj;
    D3DXMatrixPerspectiveFovLH( 
& matProj, D3DX_PI / 4 1.0f 1.0f 100.0f  );
    g_pd3dDevice
-> SetTransform( D3DTS_PROJECTION,  & matProj );
}


// -----------------------------------------------------------------------------
//  Name: Render()
//  Desc: Draws the scene
// -----------------------------------------------------------------------------
VOID Render()
{
    
//  Clear the backbuffer and the zbuffer
    g_pd3dDevice -> Clear(  0 , NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
                         D3DCOLOR_XRGB(
0 , 0 , 255 ),  1.0f 0  );

    
//  Begin the scene
     if ( SUCCEEDED( g_pd3dDevice -> BeginScene() ) )
    {
        
//  Setup the world, view, and projection matrices
        SetupMatrices();

        
//  Setup our texture. 
        
//  配置紋理
        
//  Using textures introduces the texture stage states,
        
//  which govern how textures get blended together (in the case of multiple
        
//  textures) and lighting information. In this case, we are modulating
        
//  (blending) our texture with the diffuse color of the vertices.
        g_pd3dDevice -> SetTexture(  0 , g_pTexture );
        g_pd3dDevice
-> SetTextureStageState(  0 , D3DTSS_COLOROP,   D3DTOP_MODULATE );
        g_pd3dDevice
-> SetTextureStageState(  0 , D3DTSS_COLORARG1, D3DTA_TEXTURE );
        g_pd3dDevice
-> SetTextureStageState(  0 , D3DTSS_COLORARG2, D3DTA_DIFFUSE );
        g_pd3dDevice
-> SetTextureStageState(  0 , D3DTSS_ALPHAOP,   D3DTOP_DISABLE );

    #ifdef SHOW_HOW_TO_USE_TCI
        
//  Note: to use D3D texture coordinate generation, use the stage state
    
//  D3DTSS_TEXCOORDINDEX, as shown below. In this example, we are using
    
//  the position of the vertex in camera space (D3DTSS_TCI_CAMERASPACEPOSITION)
    
//  to generate texture coordinates. Camera space is the vertex position
    
//  multiplied by the World and View matrices.  The tex coord index (TCI)  
    
//  parameters are passed into a texture transform, which is a 4x4 matrix  
    
//  which transforms the x,y,z TCI coordinates into tu, tv texture coordinates.

    
//  In this example, the texture matrix is setup to transform the input
    
//  camera space coordinates (all of R^3) to projection space (-1,+1) 
    
//  and finally to texture space (0,1).
    
//     CameraSpace.xyzw = (input vertex position) * (WorldView)
    
//     ProjSpace.xyzw = CameraSpace.xyzw * Projection            // move to -1 to 1
    
//     TexSpace.xyzw = ProjSpace.xyzw * ( 0.5, -0.5, 1.0, 1.0 )  // scale to -0.5 to 0.5 (flip y)
    
//     TexSpace.xyzw += ( 0.5, 0.5, 0.0, 0.0 )                   // shift to 0 to 1

    
//  Setting D3DTSS_TEXTURETRANSFORMFLAGS to D3DTTFF_COUNT4 | D3DTTFF_PROJECTED
    
//  tells D3D to divide the input texture coordinates by the 4th (w) component.
    
//  This divide is necessary when performing a perspective projection since
    
//  the TexSpace.xy coordinates prior to the homogeneous divide are not actually 
    
//  in the 0 to 1 range.
    D3DXMATRIXA16 mTextureTransform;
    D3DXMATRIXA16 mProj;
    D3DXMATRIXA16 mTrans;
    D3DXMATRIXA16 mScale;

    g_pd3dDevice
-> GetTransform( D3DTS_PROJECTION,  & mProj );
    D3DXMatrixTranslation( 
& mTrans,  0.5f 0.5f 0.0f  );
    D3DXMatrixScaling( 
& mScale,  0.5f - 0.5f 1.0f  );
    mTextureTransform 
=  mProj  *  mScale  *  mTrans;

    g_pd3dDevice
-> SetTransform( D3DTS_TEXTURE0,  & mTextureTransform );
    g_pd3dDevice
-> SetTextureStageState(  0 , D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT4  |  D3DTTFF_PROJECTED );
    g_pd3dDevice
-> SetTextureStageState(  0 , D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION );
    
#endif

        
//  Render the vertex buffer contents
        g_pd3dDevice -> SetStreamSource(  0 , g_pVB,  0 sizeof (CUSTOMVERTEX) );
        g_pd3dDevice
-> SetFVF( D3DFVF_CUSTOMVERTEX );
        g_pd3dDevice
-> DrawPrimitive( D3DPT_TRIANGLESTRIP,  0 2 * 50 - 2  );

        
//  End the scene
        g_pd3dDevice -> EndScene();
    }

    
//  Present the backbuffer contents to the display
    g_pd3dDevice -> Present( NULL, NULL, NULL, NULL );
}




// -----------------------------------------------------------------------------
//  Name: MsgProc()
//  Desc: The window's message handler
// -----------------------------------------------------------------------------
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    
switch ( msg )
    {
        
case  WM_DESTROY:
            Cleanup();
            PostQuitMessage( 
0  );
            
return   0 ;
    }

    
return  DefWindowProc( hWnd, msg, wParam, lParam );
}




// -----------------------------------------------------------------------------
//  Name: WinMain()
//  Desc: The application's entry point
// -----------------------------------------------------------------------------
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
    
//  Register the window class
    WNDCLASSEX wc  =  {  sizeof (WNDCLASSEX), CS_CLASSDC, MsgProc,  0L 0L ,
                      GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                      
" D3D Tutorial " , NULL };
    RegisterClassEx( 
& wc );

    
//  Create the application's window
    HWND hWnd  =  CreateWindow(  " D3D Tutorial " " D3D Tutorial 05: Textures " ,
                              WS_OVERLAPPEDWINDOW, 
100 100 300 300 ,
                              NULL, NULL, wc.hInstance, NULL );

    
//  Initialize Direct3D
     if ( SUCCEEDED( InitD3D( hWnd ) ) )
    {
        
//  Create the scene geometry
         if ( SUCCEEDED( InitGeometry() ) )
        {
            
//  Show the window
            ShowWindow( hWnd, SW_SHOWDEFAULT );
            UpdateWindow( hWnd );

            
//  Enter the message loop
            MSG msg;
            ZeroMemory( 
& msg,  sizeof (msg) );
            
while ( msg.message != WM_QUIT )
            {
                
if ( PeekMessage(  & msg, NULL,  0U 0U , PM_REMOVE ) )
                {
                    TranslateMessage( 
& msg );
                    DispatchMessage( 
& msg );
                }
                
else
                    Render();
            }
        }
    }

    UnregisterClass( 
" D3D Tutorial " , wc.hInstance );
    
return   0 ;
}


posted on 2007-02-16 17:15 七星重劍 閱讀(1355) 評論(0)  編輯 收藏 引用 所屬分類: Game Graphics
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美高清一区二区| 亚洲欧美日韩国产中文在线| 美脚丝袜一区二区三区在线观看 | 一区二区三区日韩精品视频| 欧美日韩三级| 欧美在线不卡| 久久久久在线观看| aa级大片欧美三级| 一区二区三区 在线观看视频| 国产精品亚洲精品| 狼人社综合社区| 欧美精品成人在线| 香蕉av福利精品导航| 久久精品系列| 99精品视频网| 亚洲欧美bt| 亚洲欧洲精品一区二区精品久久久| 亚洲精品免费在线播放| 欧美精品免费播放| 欧美在线观看一区二区| 欧美成人网在线| 欧美一级二区| 欧美激情黄色片| 久久国产精品亚洲va麻豆| 免费观看30秒视频久久| 亚洲免费在线| 欧美成熟视频| 久久男人av资源网站| 欧美日韩在线播放三区| 美女啪啪无遮挡免费久久网站| 欧美日韩亚洲综合| 蜜臀av在线播放一区二区三区| 欧美三级中文字幕在线观看| 免费不卡亚洲欧美| 国产精品系列在线| 亚洲精品乱码久久久久久久久| 国产亚洲精品一区二区| 一本色道久久综合亚洲91| 在线观看视频一区二区欧美日韩| 亚洲桃色在线一区| 日韩视频在线一区| 久热精品视频| 久久一区中文字幕| 国产喷白浆一区二区三区| 亚洲乱码国产乱码精品精| 亚洲国产精品久久久久秋霞不卡 | 欧美性生交xxxxx久久久| 欧美国产乱视频| 国产色综合天天综合网| 日韩一级精品| 日韩网站在线观看| 欧美成人资源网| 亚洲电影观看| 亚洲国产影院| 美女999久久久精品视频| 久久夜色精品国产噜噜av| 国产精品免费区二区三区观看| 亚洲经典一区| 亚洲精品裸体| 欧美激情视频网站| 亚洲国产毛片完整版| 亚洲国产婷婷综合在线精品| 久久久亚洲综合| 女仆av观看一区| 亚洲国产精品123| 麻豆av一区二区三区| 欧美激情第一页xxx| 亚洲精品在线免费| 欧美日韩国产一区| 在线视频你懂得一区| 亚洲一区中文| 国产欧美精品日韩精品| 午夜影视日本亚洲欧洲精品| 久久久91精品国产| 亚洲成色精品| 欧美人成在线视频| 亚洲无线视频| 久久一区二区视频| 亚洲精品一区在线观看香蕉| 欧美日韩第一区| 亚洲欧美另类久久久精品2019| 久久精视频免费在线久久完整在线看| 国产亚洲a∨片在线观看| 久久在精品线影院精品国产| 亚洲二区免费| 亚洲一二三区精品| 国产一区二区三区在线播放免费观看| 久久久久久9| 日韩视频免费观看高清完整版| 亚洲欧美激情在线视频| 国际精品欧美精品| 欧美黑人国产人伦爽爽爽| 一区二区精品在线观看| 久久国产精品久久久久久| 亚洲高清免费在线| 欧美色中文字幕| 久久蜜桃香蕉精品一区二区三区| 亚洲国产欧美不卡在线观看| 亚洲欧美精品在线| 亚洲第一精品福利| 国产精品日本一区二区| 久久久美女艺术照精彩视频福利播放| 亚洲精品免费观看| 久久激情视频免费观看| 日韩视频免费观看| 国产午夜亚洲精品不卡| 欧美日韩一区二区三区四区在线观看| 性色一区二区| 一区二区三区免费观看| 欧美成人dvd在线视频| 午夜天堂精品久久久久| 最新亚洲电影| 国产一区二区三区电影在线观看 | 欧美日本亚洲韩国国产| 久久九九久精品国产免费直播| 日韩亚洲欧美在线观看| 免费在线播放第一区高清av| 欧美一区二区三区在线观看视频| 99成人在线| 亚洲国产天堂久久综合网| 国产午夜精品美女毛片视频| 欧美日韩免费一区二区三区| 美女日韩欧美| 久久久精品欧美丰满| 性欧美xxxx大乳国产app| 亚洲新中文字幕| 99re6这里只有精品视频在线观看| 欧美成人一区二区| 久久亚洲风情| 久久久免费精品视频| 欧美在线一二三四区| 香蕉久久精品日日躁夜夜躁| 亚洲在线黄色| 亚洲——在线| 亚洲欧美日韩综合| 亚洲在线观看免费| 亚洲欧美久久| 欧美一级大片在线观看| 亚洲欧美偷拍卡通变态| 西瓜成人精品人成网站| 亚洲欧美国产三级| 性18欧美另类| 久久精品电影| 玖玖在线精品| 欧美激情中文字幕在线| 亚洲国产日韩一区二区| 最新国产成人在线观看| 亚洲精品久久久久久下一站 | 久久久福利视频| 久久久久久久一区二区三区| 久久久久国产精品一区二区| 久久久久久综合| 欧美大片网址| 日韩亚洲不卡在线| 亚洲手机成人高清视频| 午夜精品福利视频| 久久频这里精品99香蕉| 欧美韩国日本一区| 国产精品国产三级国产专区53| 国产精品日韩在线播放| 国产亚洲在线| 亚洲三级电影全部在线观看高清| 一本色道久久88精品综合| 亚洲永久在线观看| 久久全国免费视频| 亚洲盗摄视频| 亚洲小视频在线| 久久婷婷麻豆| 欧美日韩国产首页| 国产日韩欧美在线| 亚洲国产专区校园欧美| 亚洲制服av| 老司机亚洲精品| 一区二区三区久久| 狂野欧美一区| 国产精品视频一| 亚洲清纯自拍| 久久久福利视频| 亚洲精选视频在线| 欧美综合国产| 国产精品va在线播放| 亚洲第一精品福利| 亚洲欧美日韩天堂| 欧美国产精品| 久久国产精品久久久久久电车| 欧美人成在线| 亚洲国内精品在线| 久久九九电影| 一区二区三区精品视频| 麻豆成人小视频| 国产一区二区精品丝袜| 一本大道久久a久久综合婷婷| 久久午夜精品| 亚洲女同精品视频| 欧美久久久久中文字幕| 亚洲电影免费在线| 久久久精品五月天| 亚洲一级影院| 国产精品高潮呻吟视频| 99在线精品视频|