• <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>

            李錦俊(mybios)的blog

            游戲開發(fā) C++ Cocos2d-x OpenGL DirectX 數(shù)學(xué) 計算機(jī)圖形學(xué) SQL Server

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              86 Posts :: 0 Stories :: 370 Comments :: 0 Trackbacks

            公告

            QQ:30743734
            EMain:mybios@qq.com

            常用鏈接

            留言簿(16)

            我參與的團(tuán)隊(duì)

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 370257
            • 排名 - 67

            最新評論

            閱讀排行榜

            評論排行榜

            ??1 #include? < D3DX9.h >
            ??2 #include? < string >
            ??3 typedef?std:: string ?String;
            ??4 #define ?SAFE_RELEASE(o)?{if(o){o->Release();o?=?0;}}
            ??5
            ??6
            ??7 LPDIRECT3D9?g_pD3D? = ? 0 ;???????????????? // ?D3D?Driver
            ??8 LPDIRECT3DDEVICE9?g_pd3dDevice? = ? 0 ;???? // ?D3D?設(shè)備
            ??9 D3DCAPS9?g_Caps? = ? {(D3DDEVTYPE) 0 } ;???? // ?D3D?的帽子
            ?10 LPDIRECT3DVERTEXBUFFER9?g_pVB? = ? 0 ;???? // ?頂點(diǎn)緩沖區(qū)
            ?11 LPDIRECT3DINDEXBUFFER9?g_pIB? = ? 0 ;???? // ?索引緩沖區(qū)
            ?12 LPDIRECT3DTEXTURE9?g_pTexture? = ? 0 ;???? // ?貼圖
            ?13
            ?14 // ?頂點(diǎn)定義
            ?15 #define ?D3DFVF_CUSTOMVERTEX?(D3DFVF_XYZ?|?D3DFVF_DIFFUSE?|?D3DFVF_TEX1)
            ?16 struct ?CUSTOMVERTEX
            ?17 {
            ?18 ????D3DXVECTOR3?position;
            ?19 ????D3DCOLOR?color;
            ?20 ???? float ?u?,?v;
            ?21 }
            ;
            ?22
            ?23 // ?錯誤記錄
            ?24 void ?D3DErr(String?strMsg)
            ?25 {
            ?26 ????MessageBox( 0 ?,?strMsg.c_str()?,? " 錯誤 " ?,?MB_OK);
            ?27 }

            ?28
            ?29 // ?初始化頂點(diǎn)緩沖區(qū)
            ?30 HRESULT?InitVB()
            ?31 {
            ?32 ???? // ?創(chuàng)建頂點(diǎn)緩沖區(qū)
            ?33 ???? if (FAILED(g_pd3dDevice -> CreateVertexBuffer( 4 ? * ? sizeof (CUSTOMVERTEX)?,? 0 ?,?D3DFVF_CUSTOMVERTEX?,?D3DPOOL_DEFAULT?,? & g_pVB?,? 0 )))
            ?34 ???????? return ?E_FAIL;
            ?35
            ?36 ????CUSTOMVERTEX? * pVertecies;
            ?37 ???? // ?鎖定緩沖區(qū)
            ?38 ???? if (SUCCEEDED(g_pVB -> Lock( 0 ?,? 0 ?,?( void ** ) & pVertecies?,? 0 )))
            ?39 ???? {
            ?40 ????????pVertecies[ 0 ].position? = ?D3DXVECTOR3( - 1 ?,? 1 ?,? 0 );
            ?41 ????????pVertecies[ 1 ].position? = ?D3DXVECTOR3( - 1 ?,? - 1 ?,? 0 );
            ?42 ????????pVertecies[ 2 ].position? = ?D3DXVECTOR3( 1 ?,? 1 ?,? 0 );
            ?43 ????????pVertecies[ 3 ].position? = ?D3DXVECTOR3( 1 ?,? - 1 ?,? 0 );
            ?44
            ?45 ????????pVertecies[ 0 ].u? = ? 0 ;
            ?46 ????????pVertecies[ 0 ].v? = ? 0 ;
            ?47
            ?48 ????????pVertecies[ 1 ].u? = ? 0 ;
            ?49 ????????pVertecies[ 1 ].v? = ? 1 ;
            ?50
            ?51 ????????pVertecies[ 2 ].u? = ? 1 ;
            ?52 ????????pVertecies[ 2 ].v? = ? 0 ;
            ?53
            ?54 ????????pVertecies[ 3 ].u? = ? 1 ;
            ?55 ????????pVertecies[ 3 ].v? = ? 1 ;
            ?56
            ?57 ????????pVertecies[ 0 ].color? = ? 0xFFFFFFFF ;
            ?58 ????????pVertecies[ 1 ].color? = ? 0xFFFFFFFF ;
            ?59 ????????pVertecies[ 2 ].color? = ? 0xFFFFFFFF ;
            ?60 ????????pVertecies[ 3 ].color? = ? 0xFFFFFFFF ;
            ?61 ????????g_pVB -> Unlock();
            ?62 ????}

            ?63 ???? else
            ?64 ???? {
            ?65 ???????? return ?E_FAIL;
            ?66 ????}

            ?67
            ?68 ???? // ?載入紋理
            ?69 ???? if (FAILED(D3DXCreateTextureFromFile(g_pd3dDevice?,? " ..\\..\\Media\\BRICE.JPG " ?,? & g_pTexture)))
            ?70 ???? {
            ?71 ????????D3DErr( " 無法載入紋理Brice.jpg " );
            ?72 ???????? return ?E_FAIL;
            ?73 ????}

            ?74 ???? return ?S_OK;
            ?75 }

            ?76
            ?77 // ?初始化模型
            ?78 HRESULT?InitGeometry()
            ?79 {
            ?80 ???? // ?創(chuàng)建頂點(diǎn)緩沖區(qū)
            ?81 ???? if (FAILED(InitVB()))
            ?82 ???????? return ?E_FAIL;
            ?83 ???? return ?S_OK;
            ?84 }

            ?85
            ?86 // ?設(shè)置矩陣變換
            ?87 void ?SetTransform()
            ?88 {
            ?89
            ?90 ???? // ?世界變換
            ?91 ????D3DXMATRIX?matWorld?,?matT1?,?matT2?,?matR;
            ?92 ????D3DXMatrixIdentity( & matWorld);
            ?93 ???? // ?設(shè)置世界矩陣
            ?94 ????g_pd3dDevice -> SetTransform(D3DTS_WORLD?,? & matWorld);
            ?95 ???? // ?Set?up?our?view?matrix.?A?view?matrix?can?be?defined?given?an?eye?point,
            ?96 ???? // ?a?point?to?lookat,?and?a?direction?for?which?way?is?up.?Here,?we?set?the
            ?97 ???? // ?eye?five?units?back?along?the?z-axis?and?up?three?units,?look?at?the
            ?98 ???? // ?origin,?and?define?"up"?to?be?in?the?y-direction.
            ?99 ???? // ?視口變換
            100 ????D3DXMATRIX?matView;
            101 ????D3DXMatrixLookAtLH( & matView?,? & D3DXVECTOR3( 0 ?,? 0 ?,? - 5 )
            102 ????????,? & D3DXVECTOR3( 0 ?,? 0 ?,? 0 )?
            103 ????????,? & D3DXVECTOR3( 0 ?,? 1 ?,? 0 ));
            104 ????g_pd3dDevice -> SetTransform(D3DTS_VIEW?,? & matView);
            105 ???? // ?For?the?projection?matrix,?we?set?up?a?perspective?transform?(which
            106 ???? // ?transforms?geometry?from?3D?view?space?to?2D?viewport?space,?with
            107 ???? // ?a?perspective?divide?making?objects?smaller?in?the?distance).?To?build
            108 ???? // ?a?perpsective?transform,?we?need?the?field?of?view?(1/4?pi?is?common),
            109 ???? // ?the?aspect?ratio,?and?the?near?and?far?clipping?planes?(which?define?at
            110 ???? // ?what?distances?geometry?should?be?no?longer?be?rendered).
            111 ????D3DXMATRIXA16?matProj;
            112 ???? // ?這里我曾經(jīng)犯了個大錯!!把ZNear的參數(shù)傳0進(jìn)去了!這樣會導(dǎo)致一個很嚴(yán)重的問題。。你試試就知道。但是我想不通為何會出現(xiàn)這個問題。。我笨啊
            113 ????D3DXMatrixPerspectiveFovLH(? & matProj,?D3DX_PI / 4 ,? 1.0f ,? 1.0f ,? 100.0f ?);
            114 ????g_pd3dDevice -> SetTransform(?D3DTS_PROJECTION,? & matProj?);
            115
            116 ???? // ?紋理坐標(biāo)平移
            117 ????D3DXMATRIXA16?matTexture;
            118 ????D3DXMatrixIdentity( & matTexture);
            119 ???? // ?要使用3*3矩陣來平移2D紋理,所以要設(shè)置31來平移。不懂為什么要設(shè)置31的話看看《計算機(jī)圖形學(xué)》的2D變換那章
            120 ????matTexture._31? = ?timeGetTime()? % ? 3000 ? / ? 1500.0f ;
            121 ????g_pd3dDevice -> SetTransform(D3DTS_TEXTURE0?,? & matTexture);
            122
            123 }

            124
            125 // ?渲染場景
            126 void ?Render()
            127 {
            128 ???? if (g_pd3dDevice)
            129 ???? {
            130 ???????? // ?清空場景
            131 ????????g_pd3dDevice -> Clear( 0 ?,? 0 ?,?D3DCLEAR_TARGET? | ?D3DCLEAR_ZBUFFER?,?D3DCOLOR_XRGB( 0 ?,? 0 ?,? 0 )?,? 1 ?,? 0 );
            132 ???????? // ?開始渲染
            133 ???????? if (SUCCEEDED(g_pd3dDevice -> BeginScene()))
            134 ???????? {
            135 ????????????SetTransform();
            136 ????????????g_pd3dDevice -> SetTexture( 0 ?,?g_pTexture);
            137 ???????????? // ?要想用矩陣來平移2D紋理,必須設(shè)置D3DTSS_TEXTURETRANSFORMFLAGS成D3DTTFF_COUNT2
            138 ????????????g_pd3dDevice -> SetTextureStageState( 0 ,?D3DTSS_TEXTURETRANSFORMFLAGS,?D3DTTFF_COUNT2);
            139 ???????????? // ?這句在這里可有可無
            140 ????????????g_pd3dDevice -> SetTextureStageState( 0 ,?D3DTSS_TEXCOORDINDEX,? 0 );
            141 ????????????
            142 ????????????g_pd3dDevice -> SetSamplerState( 0 ?,?D3DSAMP_ADDRESSU?,?D3DTADDRESS_MIRROR);
            143 ????????????g_pd3dDevice -> SetSamplerState( 0 ?,?D3DSAMP_ADDRESSV?,?D3DTADDRESS_MIRROR);
            144 ????????????g_pd3dDevice -> SetRenderState(D3DRS_LIGHTING?,?FALSE);
            145 ???????????? // g_pd3dDevice->SetRenderState(D3DRS_FILLMODE?,?D3DFILL_WIREFRAME);
            146 ????????????g_pd3dDevice -> SetStreamSource( 0 ?,?g_pVB?,? 0 ?,? sizeof (CUSTOMVERTEX));
            147 ????????????g_pd3dDevice -> SetFVF(D3DFVF_CUSTOMVERTEX);
            148 ????????????g_pd3dDevice -> DrawPrimitive(D3DPT_TRIANGLESTRIP?,? 0 ?,? 2 );
            149 ????????????g_pd3dDevice -> EndScene();
            150 ????????}

            151 ???????? // ?顯示
            152 ????????g_pd3dDevice -> Present( 0 ?,? 0 ?,? 0 ?,? 0 );
            153 ????}

            154 }

            155
            156 // ?初始化?D3D?設(shè)備
            157 HRESULT?InitD3D(HWND?hWnd)
            158 {
            159 ???? // ?創(chuàng)建?D3D?Driver
            160 ???? if (NULL? == ?(g_pD3D? = ?Direct3DCreate9(D3D_SDK_VERSION)))
            161 ???? {
            162 ????????D3DErr( " 無法創(chuàng)建Direct3D9設(shè)備 " );
            163 ???????? return ?E_FAIL;
            164 ????}

            165 ???? // ?獲取當(dāng)前顯示模式
            166 ????D3DDISPLAYMODE?d3ddm;
            167 ???? if (FAILED(g_pD3D -> GetAdapterDisplayMode(D3DADAPTER_DEFAULT?,? & d3ddm)))
            168 ???? {
            169 ????????D3DErr( " 無法獲取D3D顯示器模式 " );
            170 ???????? return ?E_FAIL;
            171 ????}

            172
            173 ???? // ?獲取窗口的大小
            174 ????RECT?rect;
            175 ????GetClientRect(hWnd?,? & rect);
            176
            177 ???? // ?填充參數(shù)
            178 ????D3DPRESENT_PARAMETERS?d3dpp;
            179 ????memset( & d3dpp?,? 0 ?,? sizeof (d3dpp));
            180 ????d3dpp.BackBufferFormat? = ?d3ddm.Format;
            181 ????d3dpp.BackBufferWidth? = ?rect.right? - ?rect.left;
            182 ????d3dpp.BackBufferHeight? = ?rect.bottom? - ?rect.top;
            183 ????d3dpp.SwapEffect? = ?D3DSWAPEFFECT_DISCARD;
            184 ????d3dpp.Windowed? = ? true ;
            185 ????d3dpp.AutoDepthStencilFormat? = ?D3DFMT_D16;
            186 ????d3dpp.EnableAutoDepthStencil? = ?TRUE;
            187
            188 ???? // ?獲取帽子
            189 ???? if (FAILED(g_pD3D -> GetDeviceCaps(D3DADAPTER_DEFAULT?,?D3DDEVTYPE_HAL?,? & g_Caps)))
            190 ???? {
            191 ????????D3DErr( " 獲取D3D?帽子時發(fā)生錯誤 " );
            192 ???????? return ?E_FAIL;
            193 ????}

            194
            195 ???? // ?創(chuàng)建D3D設(shè)備
            196 ???? if (FAILED(g_pD3D -> CreateDevice(D3DADAPTER_DEFAULT
            197 ????????,?D3DDEVTYPE_HAL
            198 ????????,?hWnd
            199 ???????? // ?檢查是否支持硬件頂點(diǎn)處理
            200 ????????,?g_Caps.DevCaps? & ?D3DDEVCAPS_HWTRANSFORMANDLIGHT? ? ?D3DCREATE_HARDWARE_VERTEXPROCESSING?:?D3DCREATE_SOFTWARE_VERTEXPROCESSING
            201 ????????,? & d3dpp
            202 ????????,? & g_pd3dDevice
            203 ????????)
            204 ????????))
            205 ???? {
            206 ????????D3DErr( " 創(chuàng)建D3D設(shè)備時發(fā)生錯誤 " );
            207 ???????? return ?E_FAIL;
            208 ????}

            209 ????g_pd3dDevice -> SetRenderState(?D3DRS_CULLMODE,?D3DCULL_NONE?);
            210 ????g_pd3dDevice -> SetRenderState(?D3DRS_ZENABLE,?TRUE?);
            211
            212 ???? if (FAILED(InitGeometry()))
            213 ???????? return ?E_FAIL;
            214 ???? return ?S_OK;
            215 }

            216
            217 // ?清空所有占用的資源
            218 void ?CleanUp()
            219 {
            220 ????SAFE_RELEASE(g_pTexture);
            221 ????SAFE_RELEASE(g_pIB);
            222 ????SAFE_RELEASE(g_pVB);
            223 ????SAFE_RELEASE(g_pd3dDevice);
            224 ????SAFE_RELEASE(g_pD3D);
            225 }

            226
            227
            228 // ?消息處理
            229 LRESULT?WINAPI?MsgProc(HWND?hWnd?,?UINT?message?,?WPARAM?wParam?,?LPARAM?lParam)
            230 {
            231 ???? switch (message)
            232 ???? {
            233 ???? case ?WM_DESTROY:
            234 ????????CleanUp();
            235 ????????PostQuitMessage( 0 );
            236 ???????? break ;
            237 ????}

            238 ???? return ?::DefWindowProc(hWnd,?message?,?wParam?,?lParam);
            239 }

            240
            241 // ?Windows?入口
            242 int ?WINAPI?WinMain(IN?HINSTANCE?hInstance,?IN?HINSTANCE?hPrevInstance,?IN?LPSTR?lpCmdLine,?IN? int ?nShowCmd?)
            243 {
            244 ????WNDCLASS?wndClass;
            245 ????memset( & wndClass?,? 0 ?,? sizeof (wndClass));
            246 ????wndClass.hInstance? = ?hInstance;
            247 ????wndClass.lpszClassName? = ? " Tutorial02 " ;
            248 ????wndClass.lpfnWndProc? = ?MsgProc;
            249 ????RegisterClass( & wndClass);
            250
            251 ???? // ?創(chuàng)建窗口
            252 ????HWND?hWnd? = ?CreateWindow( " Tutorial02 " ?,? " Tutorial02?Texture?Scrolling " ?
            253 ????????,?WS_OVERLAPPEDWINDOW?,? 0 ?,? 0 ?,? 512 ?, 512 ?,?GetDesktopWindow()
            254 ????????,? 0 ?,?wndClass.hInstance?,? 0 );
            255 ???? // ?顯示窗口
            256 ????ShowWindow(hWnd?,?SW_SHOWDEFAULT);
            257 ????UpdateWindow(hWnd);
            258
            259 ???? // ?初始化?D3D?設(shè)備
            260 ???? if (SUCCEEDED(InitD3D(hWnd)))
            261 ???? {
            262 ???????? // ?消息處理循環(huán)
            263 ????????MSG?msg;
            264 ????????memset( & msg?,? 0 ?,? sizeof (msg));
            265 ???????? while (msg.message? != ?WM_QUIT)
            266 ???????? {
            267 ???????????? if (PeekMessage( & msg?,? 0 ?,? 0 ?,? 0 ?,?PM_REMOVE))
            268 ???????????? {
            269 ????????????????TranslateMessage( & msg);
            270 ????????????????DispatchMessage( & msg);
            271 ????????????}

            272 ???????????? else
            273 ???????????? {
            274 ????????????????Render();
            275 ????????????}

            276 ????????}

            277 ????}

            278 ???? // ?清空場景
            279 ????CleanUp();
            280
            281 ????UnregisterClass( " Tutorial02 " ?,?wndClass.hInstance);
            282
            283 ???? return ? 0 ;
            284 }
            posted on 2006-11-16 11:15 李錦俊(mybios) 閱讀(1342) 評論(1)  編輯 收藏 引用 所屬分類: Direct3D

            Feedback

            # re: 【原創(chuàng)】《DirectX 9 3D 圖形程序設(shè)計》 Tutorial 06 紋理貼圖以及紋理坐標(biāo)變換(紋理動畫) 2007-12-22 10:13 zhangyb
            請問,我要給我的模型重新貼圖,或者更改已有 的貼圖應(yīng)該是怎么做?
            是應(yīng)該 release掉 materials嗎?
            然后重新 creatematerials嗎?

            多謝有誰可以給我說說,跪謝  回復(fù)  更多評論
              

            国产成人无码精品久久久久免费| 99久久久久| 99久久久精品免费观看国产| 久久这里只有精品18| 99久久国产主播综合精品| 无码乱码观看精品久久| 久久精品免费大片国产大片| 国内精品久久久久久久影视麻豆 | 久久久久国产成人精品亚洲午夜| 777米奇久久最新地址| 久久国产V一级毛多内射| 久久人妻少妇嫩草AV蜜桃| 久久久久国产精品| 久久人与动人物a级毛片| 久久国产热精品波多野结衣AV| 久久精品国产亚洲AV无码娇色| 久久成人国产精品| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 国产精品99久久精品爆乳| 欧美亚洲国产精品久久高清| 欧美777精品久久久久网| 亚洲国产精品无码久久久秋霞2 | 久久性精品| 久久久久久亚洲精品影院| 久久这里只有精品久久| 91亚洲国产成人久久精品网址| 国产精品美女久久久久AV福利| 国内精品久久久久久中文字幕| 人妻无码久久精品| 精品人妻伦一二三区久久| 国产91久久精品一区二区| 88久久精品无码一区二区毛片 | 99精品久久精品一区二区| 久久播电影网| 婷婷久久综合九色综合98| 久久久久99精品成人片试看| 777久久精品一区二区三区无码| 色婷婷久久久SWAG精品| 久久精品无码专区免费 | 久久精品国产只有精品2020| 99久久超碰中文字幕伊人|