国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Direct3D---紋理映射

2019-11-10 18:06:45
字體:
供稿:網(wǎng)友
//--------------------------------------------------------------------------------------// 【紋理繪制四步曲之一】:頂點的定義 //--------------------------------------------------------------------------------------struct CUSTOMVERTEX { FLOAT _x, _y, _z; // 頂點的位置 FLOAT _u, _v; // 紋理坐標(biāo) CUSTOMVERTEX(FLOAT x, FLOAT y, FLOAT z, FLOAT u, FLOAT v) : _x(x), _y(y), _z(z), _u(u), _v(v) {}};//D3DFVF_TEX1: 一層紋理#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_TEX1)// 【紋理繪制四步曲之二】:頂點的訪問 //-------------------------------------------------------------------------------------- //填充頂點緩存 CUSTOMVERTEX* pVertices; if( FAILED( g_pVertexBuffer->Lock( 0, sizeof(CUSTOMVERTEX), (void**)&pVertices, 0 ) ) ) return E_FAIL; // 正面頂點數(shù)據(jù) // 前3個數(shù)據(jù)為頂點位置,后2個數(shù)據(jù)為紋理坐標(biāo) pVertices[0] = CUSTOMVERTEX(-10.0f, 10.0f, -10.0f, 0.0f, 0.0f); pVertices[1] = CUSTOMVERTEX( 10.0f, 10.0f, -10.0f, 2.0f, 0.0f); pVertices[2] = CUSTOMVERTEX( 10.0f, -10.0f, -10.0f, 2.0f, 2.0f); pVertices[3] = CUSTOMVERTEX(-10.0f, -10.0f, -10.0f, 0.0f, 2.0f); // 背面頂點數(shù)據(jù) pVertices[4] = CUSTOMVERTEX( 10.0f, 10.0f, 10.0f, 0.0f, 0.0f); pVertices[5] = CUSTOMVERTEX(-10.0f, 10.0f, 10.0f, 2.0f, 0.0f); pVertices[6] = CUSTOMVERTEX(-10.0f, -10.0f, 10.0f, 2.0f, 2.0f); pVertices[7] = CUSTOMVERTEX( 10.0f, -10.0f, 10.0f, 0.0f, 2.0f); // 頂面頂點數(shù)據(jù) pVertices[8] = CUSTOMVERTEX(-10.0f, 10.0f, 10.0f, 0.0f, 0.0f); pVertices[9] = CUSTOMVERTEX( 10.0f, 10.0f, 10.0f, 2.0f, 0.0f); pVertices[10] = CUSTOMVERTEX( 10.0f, 10.0f, -10.0f, 2.0f, 2.0f); pVertices[11] = CUSTOMVERTEX(-10.0f, 10.0f, -10.0f, 0.0f, 2.0f); // 底面頂點數(shù)據(jù) pVertices[12] = CUSTOMVERTEX(-10.0f, -10.0f, -10.0f, 0.0f, 0.0f); pVertices[13] = CUSTOMVERTEX( 10.0f, -10.0f, -10.0f, 2.0f, 0.0f); pVertices[14] = CUSTOMVERTEX( 10.0f, -10.0f, 10.0f, 2.0f, 2.0f); pVertices[15] = CUSTOMVERTEX(-10.0f, -10.0f, 10.0f, 0.0f, 2.0f); // 左側(cè)面頂點數(shù)據(jù) pVertices[16] = CUSTOMVERTEX(-10.0f, 10.0f, 10.0f, 0.0f, 0.0f); pVertices[17] = CUSTOMVERTEX(-10.0f, 10.0f, -10.0f, 1.0f, 0.0f); pVertices[18] = CUSTOMVERTEX(-10.0f, -10.0f, -10.0f, 1.0f, 1.0f); pVertices[19] = CUSTOMVERTEX(-10.0f, -10.0f, 10.0f, 0.0f, 1.0f); // 右側(cè)面頂點數(shù)據(jù) pVertices[20] = CUSTOMVERTEX( 10.0f, 10.0f, -10.0f, 0.0f, 0.0f); pVertices[21] = CUSTOMVERTEX( 10.0f, 10.0f, 10.0f, 1.0f, 0.0f); pVertices[22] = CUSTOMVERTEX( 10.0f, -10.0f, 10.0f, 1.0f, 1.0f); pVertices[23] = CUSTOMVERTEX( 10.0f, -10.0f, -10.0f, 0.0f, 1.0f); g_pVertexBuffer->Unlock();//-------------------------------------------------------------------------------------- // 【紋理繪制四步曲之三】:紋理的創(chuàng)建 //-------------------------------------------------------------------------------------- // 創(chuàng)建紋理 //g_pd3dDevice: D3Drect3D設(shè)備對象 //L"pal5q.jpg": 創(chuàng)建紋理的圖標(biāo)文件名字的字符串 //0: 創(chuàng)建紋理對象的寬度,0表示使用貼圖寬度 //0: 創(chuàng)建紋理對象的高度,0表示使用貼圖高度 //6: 創(chuàng)建紋理的漸進(jìn)級別 //0: 紋理的使用方式,一般是0 //D3DFMT_X8R8G8B8: 紋理中保存每個顏色成分所使用的位數(shù) //D3DPOOL_MANAGED: 如何管理紋理,一般為D3DPOOL_MANAGED //D3DX_DEFAULT: 圖像像素的過濾方式 //D3DX_DEFAULT: Mip像素過濾方式 //0xFF000000: 透明色,設(shè)定這個顏色,在顯示時,這圖像中的這個顏色將忽略 //0: 記錄載入圖片信息,通常為NULL //0: 記錄調(diào)色板信息,通常為NULL //g_pMipTexture: 保存最終創(chuàng)建的紋理 D3DXCreateTextureFromFileEx(g_pd3dDevice, L"pal5q.jpg", 0, 0, 6, 0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0xFF000000, 0, 0, &g_pMipTexture);//各向異性過濾 //設(shè)置最大各項異性的程度值 g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAXANISOTROPY, 3); //0: 為哪一層紋理設(shè)置采樣狀態(tài) //D3DSAMP_MAGFILTER: 對哪種紋理采樣屬性進(jìn)行操作,設(shè)置放大過濾器 //D3DTEXF_ANISOTROPIC: 對第二個屬性進(jìn)行值的設(shè)定 g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC); //D3DSAMP_MINFILTER: 對哪種紋理采樣屬性進(jìn)行操作,設(shè)置縮小過濾器 g_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC); //線性紋理過濾 //g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); //g_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); //最近點采樣過濾 //g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT); //g_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT); //漸進(jìn)紋理過濾 //g_pd3dDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR); //g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAXMIPLEVEL, 16);//-------------------------------------------------------------------------------------- // 【紋理繪制四步曲之四】:紋理的啟用 //-------------------------------------------------------------------------------------- //0: 指定了應(yīng)用紋理是哪一層 //g_pMipTexture: 將要啟用紋理的IDrect3DBaseTexture9接口對象,為第二步中定義過的g_pMipTexture參數(shù) g_pd3dDevice->SetTexture(0, g_pMipTexture); //啟用紋理

第一步為全局變量

第二步與第三步位于函數(shù)Objects_Init()中,Objects_Init()是渲染資源初始化函數(shù),在此函數(shù)中進(jìn)行要被渲染的物體的資源的初始化 Objects_Init()調(diào)用位置:Direct3D_Init()末尾,即Direct3D初始化完成后。 Direct3D_Init():Direct3D初始化函數(shù),進(jìn)行Direct3D的初始化。 Direct3D_Init()調(diào)用位置:Windows窗口創(chuàng)建后,即函數(shù)CreateWindow()后面

最后一步位于函數(shù)Direct3D_Render()中,Direct3D_Render()是使用Direct3D進(jìn)行渲染的函數(shù),位于該函數(shù)的“【Direct3D渲染五步曲之三】:正式繪制,利用頂點緩存繪制圖形 ”中 Direct3D_Render()調(diào)用位置: 窗口過程函數(shù)WndPRoc()中,接收到消息WM_PAINT后

設(shè)置紋理的尋址方式:

// 根據(jù)鍵盤按鍵的按下,設(shè)置為紋理尋址方式 if (g_pDInput->IsKeyDown(DIK_1)) //鍵盤上1鍵被按下 { // 設(shè)置重復(fù)紋理尋址模式 g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP); g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP); } if (g_pDInput->IsKeyDown(DIK_2)) //鍵盤上2鍵被按下 { // 設(shè)置鏡像紋理尋址模式 g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_MIRROR); g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_MIRROR); } if (g_pDInput->IsKeyDown(DIK_3)) //鍵盤上3鍵被按下 { // 設(shè)置夾取紋理尋址模式 g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP); g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP); } if (g_pDInput->IsKeyDown(DIK_4)) //鍵盤上4鍵被按下 { // 設(shè)置邊框紋理尋址模式 g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER); g_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER); }

位于函數(shù)Direct3D_Update()中 Direct3D_Update(): 不是即時渲染代碼但是需要即時調(diào)用的,如按鍵后的坐標(biāo)的更改,都放在這里。 Direct3D_Update()調(diào)用位置: WinMain中的消息循環(huán)過程:

//【5】消息循環(huán)過程 MSG msg = { 0 }; //初始化msg while( msg.message != WM_QUIT ) //使用while循環(huán) { if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) ) //查看應(yīng)用程序消息隊列,有消息時將隊列中的消息派發(fā)出去。 { TranslateMessage( &msg ); //將虛擬鍵消息轉(zhuǎn)換為字符消息 DispatchMessage( &msg ); //該函數(shù)分發(fā)一個消息給窗口程序。 } else { Direct3D_Update(hwnd); //調(diào)用更新函數(shù),進(jìn)行畫面的更新 Direct3D_Render(hwnd); //調(diào)用渲染函數(shù),進(jìn)行畫面的渲染 } }

這里寫圖片描述


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 邵阳县| 临颍县| 富锦市| 融水| 大邑县| 钦州市| 昌宁县| 万山特区| 阜南县| 崇文区| 惠安县| 鹤壁市| 偃师市| 上虞市| 临漳县| 龙胜| 青阳县| 鄢陵县| 土默特左旗| 常山县| 甘谷县| 富阳市| 类乌齐县| 钦州市| 梅州市| 鹿泉市| 阜城县| 巴彦县| 绍兴县| 喀喇沁旗| 张家港市| 深州市| 石阡县| 茌平县| 永安市| 静宁县| 铜山县| 崇左市| 北海市| 赤城县| 天峻县|