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

隨筆 - 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>
            亚洲精品视频在线观看免费| 久久性天堂网| 久久久久成人精品| 久久9热精品视频| 久久精品视频播放| 免费一区视频| 亚洲国产精品久久久久久女王| 欧美亚洲视频| 老司机精品视频网站| 欧美大尺度在线| 亚洲伦理在线观看| 在线一区视频| 久久蜜桃av一区精品变态类天堂| 久久综合久久综合久久综合| 亚洲第一精品影视| 亚洲欧美国内爽妇网| 久久久久久久久久看片| 欧美精品在线极品| 国产色产综合色产在线视频| 亚洲国产日韩美| 欧美亚洲在线| 亚洲卡通欧美制服中文| 久久国产欧美日韩精品| 欧美日本在线一区| 狠狠色丁香婷婷综合| 中日韩视频在线观看| 久久久精品欧美丰满| 亚洲老板91色精品久久| 久久精品国产99| 国产精品视频网址| 亚洲精品久久久久中文字幕欢迎你 | 国产一在线精品一区在线观看| 在线色欧美三级视频| 午夜精品视频网站| 亚洲欧洲精品一区二区| 久久高清福利视频| 国产精品毛片高清在线完整版| 亚洲巨乳在线| 欧美国产视频在线观看| 先锋影音国产精品| 国产精品www| 亚洲图片欧洲图片av| 亚洲国产婷婷香蕉久久久久久| 久久aⅴ国产紧身牛仔裤| 欧美亚洲第一区| 夜夜嗨av一区二区三区四季av| 欧美成人午夜剧场免费观看| 欧美在线观看网站| 国产欧美日韩视频一区二区三区| 中文亚洲视频在线| 亚洲精品在线二区| 欧美精品观看| 99成人精品| 亚洲乱码视频| 国产精品99免视看9| 亚洲一区二区在线免费观看| 99精品视频免费| 欧美无乱码久久久免费午夜一区| 一本一本久久a久久精品综合麻豆| 亚洲国产小视频在线观看| 欧美大尺度在线观看| 亚洲区在线播放| 亚洲经典在线| 欧美午夜一区二区三区免费大片| 亚洲性感激情| 亚洲欧美成人一区二区三区| 欧美在线啊v一区| 国产美女扒开尿口久久久| 小嫩嫩精品导航| 欧美亚洲视频| 亚洲电影免费在线| 最新精品在线| 国产精品美女久久久久av超清| 午夜久久久久久| 小处雏高清一区二区三区| 国产亚洲精品激情久久| 欧美1区2区3区| 欧美日韩精品国产| 久久超碰97中文字幕| 久久久综合网| 亚洲天堂男人| 久久久久久九九九九| 一片黄亚洲嫩模| 欧美亚洲自偷自偷| 亚洲全部视频| 亚洲一区二区在线视频| 在线播放日韩| 99国内精品久久久久久久软件| 国产精品爽黄69| 欧美国产日韩一二三区| 欧美日韩国产区一| 久久久久久久网站| 欧美日韩国语| 欧美插天视频在线播放| 国产精品v欧美精品v日韩| 麻豆精品网站| 国产精品女人网站| 亚洲第一精品夜夜躁人人爽| 国产欧美日韩免费| 亚洲精品欧洲| 亚洲国产天堂久久国产91| 亚洲一区免费网站| 亚洲理伦在线| 久久久精品久久久久| 亚洲欧美国产日韩中文字幕| 久久亚洲一区| 久久久久免费| 国产欧美 在线欧美| 亚洲精品在线观看视频| 亚洲成在人线av| 亚洲欧美区自拍先锋| 亚洲视频久久| 欧美大片免费看| 久久人人97超碰国产公开结果| 欧美三级电影一区| 亚洲福利一区| 亚洲第一页在线| 久久精品国产91精品亚洲| 午夜视频一区| 欧美日韩免费高清一区色橹橹| 欧美激情精品久久久| 亚洲电影av在线| 久久亚洲精选| 欧美gay视频| 精品9999| 久久精品一区二区三区不卡牛牛| 欧美与黑人午夜性猛交久久久| 国产精品福利在线| 亚洲图片欧美日产| 亚洲免费在线看| 一区二区三区免费看| 亚洲人精品午夜在线观看| 久久久久九九九| 在线精品视频免费观看| 欧美一级视频| 久久久久久欧美| 国产亚洲欧美日韩在线一区| 亚洲欧美日韩天堂| 久久精品盗摄| 国产精品一区二区三区免费观看| 一本色道久久88综合日韩精品| 亚洲一级片在线观看| 亚洲午夜一区二区三区| 亚洲午夜精品国产| 欧美午夜视频一区二区| 亚洲已满18点击进入久久| 欧美综合国产精品久久丁香| 国产亚洲精品久久飘花| 欧美亚洲专区| 欧美成人精品在线播放| 日韩一区二区精品葵司在线| 欧美电影免费观看网站| 在线播放视频一区| 欧美成人免费播放| 亚洲乱码视频| 欧美一区二区三区在线免费观看| 国产欧美日韩一区二区三区在线观看 | 亚洲国产另类 国产精品国产免费| 欧美在线播放视频| 夜夜嗨av一区二区三区四区| 国产精品久久久久久久久久妞妞 | 欧美一区二视频| 免费观看成人网| 欧美成人综合网站| 亚洲精品专区| 久久久久久久高潮| 亚洲电影免费观看高清完整版在线观看| 欧美精品v日韩精品v韩国精品v| 一区二区三区视频在线观看 | 久久国产精品亚洲77777| 黄色亚洲免费| 欧美日韩国产丝袜另类| 午夜久久久久久| 噜噜噜噜噜久久久久久91| 在线一区二区三区做爰视频网站 | 性高湖久久久久久久久| 精品av久久707| 欧美三级午夜理伦三级中视频| 在线亚洲欧美| 久久网站免费| 亚洲资源在线观看| 加勒比av一区二区| 欧美日韩欧美一区二区| 久久久九九九九| 日韩视频永久免费观看| 久久久国产精彩视频美女艺术照福利 | 一区二区三区高清不卡| 久久夜色精品国产亚洲aⅴ| 欧美精品激情| 久久不射网站| 一区二区三区国产精品| 美国成人直播| 欧美在线首页| 亚洲欧美国产不卡| 亚洲另类春色国产| 韩国成人福利片在线播放| 国产精品国产三级国产a| 欧美片在线观看| 欧美福利视频在线| 麻豆成人精品|