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

天行健 君子當自強而不息

D3D中的Alpha融合技術(2)

7.4使用DirectX紋理工具創建Alpha通道

       絕大多數普通圖象文件格式沒有存儲alpha信息,在這一部分我們給你演示怎樣使用DirectX紋理工具來創建一個帶alpha通道的DDS文件。DDS文件是一個為DirectX應用程序和紋理設置的圖象格式。DDS文件能夠利用D3DXCreateTextureFromFile函數讀進紋理中,就象bmp和jpg文件一樣。DirectX紋理工具被放在你的DXSDK目錄下的\Bin\DXUtils文件夾下,文件名是DxTex.exe。

       打開DirectX紋理工具,并且把crate.jpg文件用工具打開。木箱被自動的按照24位RGB紋理被讀取。它包含8位紅色,8位綠色,以及8位藍色。我們需要將該紋理增加為32位ARGB紋理,增加的是額外的8位alpha通道。從菜單中選擇Format,選擇Change Surface Format。一個象圖7.5的對話框將被彈出。選擇A8R8G8B8格式點擊OK。

圖7.5   改變紋理的格式

 

它創建了一個32位顏色深度的圖象,它的每個象素都有8位alpha通道,8位紅色,8位綠色,8位藍色。我們下一步是向alpha通道中寫入數據。我們將圖7.3中的8位灰色圖片信息寫進alpha通道中。選擇菜單中的File,選擇Open Onto Alpha Channel Of This Texture。一個對話框將彈出讓你選擇包含你想要寫入alpha通道中數據信息的圖片。選擇alphachannel.bmp文件。圖7.6顯示的是程序已經插入了alpha通道數據。

圖7.6  在Alpha通道作用下的紋理圖

現在用你選擇的文件名存儲紋理;我們使用cratewalpha.dds文件名。

示例程序:

/**************************************************************************************
  Renders a semi transparent cube using alpha blending.
  In this sample, the alpha is taken from the textures alpha channel.    
 *************************************************************************************
*/

#include 
"d3dUtility.h"
#include 
"vertex.h"
#include 
"cube.h"

#pragma warning(disable : 
4100)

const int WIDTH  = 640;
const int HEIGHT = 480;

IDirect3DDevice9
*        g_d3d_device;

IDirect3DTexture9
*        g_crate_texture;
cCube
*                    g_cube;
D3DXMATRIX                g_cube_world_matrix;

IDirect3DVertexBuffer9
* g_back_vb;
IDirect3DTexture9
*        g_back_texture;


////////////////////////////////////////////////////////////////////////////////////////////////////

bool setup()
{    
    
// create the background quad
    g_d3d_device->CreateVertexBuffer(6 * sizeof(cTextureVertex), D3DUSAGE_WRITEONLY, TEXTURE_VERTEX_FVF,
                                     D3DPOOL_MANAGED, 
&g_back_vb, NULL);

    cTextureVertex
* vertices;

    g_back_vb
->Lock(00, (void**)&vertices, 0);

    
// quad built from two triangles, note texture coordinate.

    vertices[
0= cTextureVertex(-10.0f-10.0f5.0f0.0f0.0f-1.0f0.0f1.0f);
    vertices[
1= cTextureVertex(-10.0f,  10.0f5.0f0.0f0.0f-1.0f0.0f0.0f);
    vertices[
2= cTextureVertex( 10.0f,  10.0f5.0f0.0f0.0f-1.0f1.0f0.0f);

    vertices[
3= cTextureVertex(-10.0f-10.0f5.0f0.0f0.0f-1.0f0.0f1.0f);
    vertices[
4= cTextureVertex( 10.0f,  10.0f5.0f0.0f0.0f-1.0f1.0f0.0f);
    vertices[
5= cTextureVertex( 10.0f-10.0f5.0f0.0f0.0f-1.0f1.0f1.0f);

    g_back_vb
->Unlock();

    
// create the cube
    g_cube = new cCube(g_d3d_device);

    
// create the texture and set filters

    D3DXCreateTextureFromFile(g_d3d_device, 
"cratewAlpha.dds",    &g_crate_texture);    
    D3DXCreateTextureFromFile(g_d3d_device, 
"lobbyxpos.jpg",    &g_back_texture);    

    g_d3d_device
->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
    g_d3d_device
->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
    g_d3d_device
->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);

    
// set alpha blending states

    
// use alhpa in material's diffuse component for alpha
    g_d3d_device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
    g_d3d_device
->SetTextureStageState(0, D3DTSS_ALPHAOP,    D3DTOP_SELECTARG1);

    
// set blending factors so that alpha component determines transparency
    g_d3d_device->SetRenderState(D3DRS_SRCBLEND,  D3DBLEND_SRCALPHA);
    g_d3d_device
->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

    
// disable lighting
    g_d3d_device->SetRenderState(D3DRS_LIGHTING, FALSE);

    
// set camera

    D3DXVECTOR3 pos(
0.0f0.0f-2.5f);
    D3DXVECTOR3 target(
0.0f0.0f0.0f);
    D3DXVECTOR3 up(
0.0f1.0f0.0f);

    D3DXMATRIX view_matrix;
    D3DXMatrixLookAtLH(
&view_matrix, &pos, &target, &up);

    g_d3d_device
->SetTransform(D3DTS_VIEW, &view_matrix);

    
// set the projection matrix
    D3DXMATRIX proj;
    D3DXMatrixPerspectiveFovLH(
&proj, D3DX_PI * 0.5f, (float)WIDTH/HEIGHT, 1.0f1000.0f);
    g_d3d_device
->SetTransform(D3DTS_PROJECTION, &proj);
    
    
return true;
}

void cleanup()
{    
    safe_release
<IDirect3DTexture9*>(g_crate_texture);    
    safe_release
<IDirect3DVertexBuffer9*>(g_back_vb);
    safe_release
<IDirect3DTexture9*>(g_back_texture);

    safe_delete
<cCube*>(g_cube);    
}

bool display(float time_delta)
{
    
// update: rotate the cube.

    D3DXMATRIX x_rot;
    D3DXMatrixRotationX(
&x_rot, D3DX_PI * 0.2f);

    
static float y = 0.0f;
    D3DXMATRIX y_rot;
    D3DXMatrixRotationY(
&y_rot, y);

    y 
+= time_delta;
    
if(y >= 6.28f)
        y 
= 0.0f;

    g_cube_world_matrix 
= x_rot * y_rot;

    
// render now

    g_d3d_device
->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x000000001.0f0);

    g_d3d_device
->BeginScene();

    
// draw the background

    D3DXMATRIX world_matrix;
    D3DXMatrixIdentity(
&world_matrix);
    g_d3d_device
->SetTransform(D3DTS_WORLD, &world_matrix);

    g_d3d_device
->SetFVF(TEXTURE_VERTEX_FVF);
    g_d3d_device
->SetStreamSource(0, g_back_vb, 0sizeof(cTextureVertex));    
    g_d3d_device
->SetTexture(0, g_back_texture);
    g_d3d_device
->DrawPrimitive(D3DPT_TRIANGLELIST, 02);

    
// draw the cube

    g_d3d_device
->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);    
    g_cube
->draw(&g_cube_world_matrix, NULL, g_crate_texture);
    g_d3d_device
->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
    
    g_d3d_device
->EndScene();

    g_d3d_device
->Present(NULL, NULL, NULL, NULL);

    
return true;
}

LRESULT CALLBACK wnd_proc(HWND hwnd, UINT msg, WPARAM word_param, LPARAM long_param)
{
    
switch(msg)
    {
    
case WM_DESTROY:
        PostQuitMessage(
0);
        
break;

    
case WM_KEYDOWN:
        
if(word_param == VK_ESCAPE)
            DestroyWindow(hwnd);
        
break;
    }

    
return DefWindowProc(hwnd, msg, word_param, long_param);
}

int WINAPI WinMain(HINSTANCE inst, HINSTANCE, PSTR cmd_line, int cmd_show)
{
    
if(! init_d3d(inst, WIDTH, HEIGHT, true, D3DDEVTYPE_HAL, &g_d3d_device))
    {
        MessageBox(NULL, 
"init_d3d() - failed."0, MB_OK);
        
return 0;
    }

    
if(! setup())
    {
        MessageBox(NULL, 
"Steup() - failed."0, MB_OK);
        
return 0;
    }

    enter_msg_loop(display);

    cleanup();
    g_d3d_device
->Release();

    
return 0;
}

 


截圖:

下載源程序


posted on 2008-03-18 14:52 lovedday 閱讀(1239) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            99精品国产在热久久下载| 99视频日韩| 牛牛国产精品| 亚洲午夜久久久久久久久电影网| 香蕉av福利精品导航| 欧美激情一区二区三区在线视频| 欧美日韩高清一区| 亚洲国产日韩在线一区模特| 翔田千里一区二区| 99精品热视频| 欧美激情按摩在线| 亚洲国产网站| 欧美激情第3页| 中国成人亚色综合网站| 欧美日韩一级片在线观看| 日韩视频在线一区二区三区| 欧美电影在线观看| 美乳少妇欧美精品| 伊大人香蕉综合8在线视| 久久黄色网页| 久久综合久久综合久久| 国产日韩欧美二区| 欧美77777| 亚洲欧美日韩视频二区| 亚洲一区二三| 激情五月***国产精品| 国产精品一卡| 久久亚洲一区二区三区四区| 免播放器亚洲| 欧美一区二区三区视频在线| 欧美综合国产| 中文欧美在线视频| 麻豆成人综合网| 久久久女女女女999久久| 欧美母乳在线| 欧美黑人在线观看| 国产麻豆午夜三级精品| 欧美黄色aaaa| 亚洲黄色成人网| 欧美中文在线观看| 亚洲欧美综合v| 欧美国产日韩在线观看| 久久精品视频在线看| 欧美午夜激情在线| 这里只有精品在线播放| 国产精品一区亚洲| 亚洲精选一区| 国产精品福利影院| 一区二区三区高清视频在线观看| 亚洲小说欧美另类婷婷| 亚洲国产精品一区制服丝袜| 亚洲欧美日韩精品在线| 亚洲欧洲日本在线| 亚洲欧美日韩综合国产aⅴ| 一区二区三区四区五区在线| 欧美精品aa| 亚洲激情网站| 日韩视频第一页| 午夜精品久久久久久久蜜桃app | 国产欧美日韩精品在线| 亚洲人成人一区二区三区| 亚洲国产欧美在线| 乱中年女人伦av一区二区| 欧美激情视频免费观看| 日韩视频在线永久播放| 国产免费成人| 久久er精品视频| 欧美伦理91i| 午夜日韩视频| 欧美看片网站| 在线亚洲自拍| 欧美日韩在线看| 亚洲小视频在线| 欧美不卡视频一区| 在线精品福利| 亚洲伊人一本大道中文字幕| 一区二区三区四区国产精品| 欧美天堂亚洲电影院在线播放| 久久国产精品亚洲va麻豆| 亚洲欧洲在线视频| 国产精品亚洲欧美| 99综合电影在线视频| 亚洲一区国产| 亚洲大片免费看| 久久精品亚洲精品| 日韩视频一区二区| 国内精品国产成人| 欧美韩国在线| 午夜久久久久久久久久一区二区| 欧美日本在线视频| 亚洲欧美日韩在线高清直播| 欧美电影打屁股sp| 国产欧美日韩视频在线观看| 免费中文字幕日韩欧美| 一本久久综合亚洲鲁鲁| 亚洲一区二区三区在线看| 欧美午夜精品久久久| 毛片一区二区三区| 欧美一区日韩一区| 欧美日本成人| 久久精品视频在线看| 亚洲一区二区成人| 亚洲精品日本| 欧美成人激情在线| 老鸭窝91久久精品色噜噜导演| 欧美一区二区三区另类 | 欧美在线日韩在线| 午夜精品福利在线观看| 亚洲欧美成人一区二区在线电影| 欧美粗暴jizz性欧美20| 亚洲精品在线视频观看| 久久久之久亚州精品露出| 99精品99| 国产精品热久久久久夜色精品三区 | 国内自拍视频一区二区三区| 欧美激情第9页| 国产精品国产一区二区 | 国产一区二区三区久久久久久久久| 亚洲精品五月天| 亚洲欧美日韩久久精品| 亚洲私人影院在线观看| 欧美一区二区三区免费大片| 精品999成人| 99亚洲视频| 久久成人综合视频| 最近中文字幕日韩精品 | 精品1区2区| 正在播放欧美视频| 在线观看久久av| 亚洲最新合集| 久久久国产精品亚洲一区| 亚洲欧洲视频在线| 久久成人久久爱| 夜夜爽www精品| 欧美波霸影院| 久久国产精品久久国产精品 | 国产精品推荐精品| 夜夜嗨av一区二区三区四区| 久久亚洲不卡| 久久手机免费观看| 国产乱人伦精品一区二区| 亚洲精选中文字幕| 欧美国产91| 亚洲欧美变态国产另类| 久久av红桃一区二区小说| 国产精品户外野外| 日韩网站在线| 亚洲精品麻豆| 欧美高清一区| 亚洲每日更新| 亚洲激情成人| 欧美日本亚洲| 国产精品v日韩精品| 一本大道久久精品懂色aⅴ| 亚洲激情国产精品| 亚洲二区视频| 亚洲人成亚洲人成在线观看图片 | 91久久精品国产91性色| 欧美黑人国产人伦爽爽爽| 欧美 日韩 国产一区二区在线视频| 国产精品草莓在线免费观看| 久久国产精品一区二区| 久久久亚洲欧洲日产国码αv | 久久综合色天天久久综合图片| 亚洲午夜精品在线| 正在播放欧美视频| 欧美福利小视频| 欧美激情一区二区三区在线| 国产精品永久免费| 中国女人久久久| 亚洲五月婷婷| 欧美性大战久久久久久久蜜臀| 一区二区三区日韩| 欧美激情一区二区三级高清视频| 亚洲大胆人体视频| 久久国产精品99久久久久久老狼 | 久久精品视频一| 这里只有精品视频| 亚洲一区二区视频在线| 欧美激情欧美狂野欧美精品| 黄色国产精品| 欧美电影免费观看高清| 亚洲精品一区二区三区av| 最新成人在线| 国产精品日韩欧美大师| 一区二区av在线| 午夜精品一区二区三区四区| 国产欧美一区二区精品婷婷 | 狂野欧美激情性xxxx欧美| 久久精品一二三区| 暖暖成人免费视频| 亚洲国产成人精品视频| 欧美成人免费播放| 夜夜嗨av一区二区三区中文字幕| 亚洲每日更新| 欧美中文在线观看国产| 亚洲人午夜精品免费| 欧美三日本三级三级在线播放| 美女精品在线| 国产香蕉久久精品综合网|