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

天行健 君子當(dāng)自強(qiáng)而不息

效果框架(3)

霧化效果(以下簡(jiǎn)稱(chēng)霧)提高了場(chǎng)景的真實(shí)性,可以用它來(lái)模擬逼真的天氣狀況。另外,霧可以大大減少遠(yuǎn)剪裁面 (far-clip)在視覺(jué)上帶給觀者的不自然的感覺(jué)。Direct3D霧化是固定功能管線的一部份,受渲染狀態(tài)限制。

下面的效果文件設(shè)置頂點(diǎn)霧,以達(dá)到必要的霧化狀態(tài)。注意:Direct3D也支持像素霧(也叫表格霧table fog),比頂點(diǎn)霧要更精確。

/**********************************************************************************
  Effect file that handles device states for linear vertex fog.
 *********************************************************************************
*/

technique FogTech
{
    pass pass0
    {
        
// set misc render states
        pixelshader         = null;
        vertexshader     
= null;
        fvf                 
= XYZ | Normal;
        Lighting         
= true;
        NormalizeNormals 
= true;
        SpecularEnable   
= false;

        
// fog states
        FogVertexMode    = LINEAR;        // linear fog function
        FogStart        = 50.0f;        // fog starts 50 units away from viewpoint
        FogEnd            = 300.0f;        // fog ends 300 units away from viewpoint
        FogColor        = 0x00CCCCCC;    // gray
        FogEnable        = true;            // enable
    }
}

 

就象你看到的,線性頂點(diǎn)霧能夠通過(guò)五個(gè)簡(jiǎn)單的渲染狀態(tài)控制:

         FogVertexMode—使用指定的霧函數(shù)用于頂點(diǎn)霧。霧函數(shù)指定霧如何根據(jù)距離增長(zhǎng),自然界的霧在近視口的地方比較薄并且根據(jù)距離增長(zhǎng)變得厚起來(lái)了。有效的任務(wù)類(lèi)型為L(zhǎng)INEAR、EXP、EXP2。這些函數(shù)被定義為:

注意:如果你用EXP或EXP2霧化函數(shù),你不用設(shè)置FogStart 和 FogEnd,因?yàn)樗鼈冊(cè)谶@些霧函數(shù)類(lèi)型中沒(méi)被用到。代替的你必須設(shè)置霧密度(fog density)渲染狀態(tài)(如,F(xiàn)ogDensity = someFloatType)

         FogStart—標(biāo)記了物體將開(kāi)始霧化的起始深度。

         FogEnd—標(biāo)記了物體將結(jié)束霧化的結(jié)束深度。

注意:FogStart 與 FogEnd本質(zhì)上定義了物體被霧化的深度間隔(從視口)。

         FogColor—一個(gè)DWORD 或 D3DCOLOR值,以描述霧的顏色

         FogEnable—指定true以開(kāi)啟頂點(diǎn)霧或false以關(guān)閉頂點(diǎn)霧

任何我們用FogShader.cxx效果渲染的幾何體將被霧化。通過(guò)這種方式,我們可以控制哪一物體得到霧化,而哪些不用霧化。這對(duì)只霧化特定區(qū)域是很有用的。例如,通常屋外是有霧的,屋里不被霧化。同樣的,一定地理部分可能有霧,而另外部分可能沒(méi)有。下圖展示了例程的屏幕截圖。

 

執(zhí)行程序:

/**************************************************************************************************
  Demonstrates using an effect file. Use the arrwo keys, and M, N, W, S, keys to move.  
 *************************************************************************************************
*/

#include 
"d3dUtility.h"
#include 
"terrain.h"
#include 
"camera.h"

#pragma warning(disable : 
4100)

using namespace std;

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

IDirect3DDevice9
*            g_device;
cTerrain
*                    g_terrain;
cCamera                        g_camera(AIR_CRAFT);
ID3DXEffect
*                g_fog_effect;
D3DXHANDLE                    g_fog_tech_handle;

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

bool setup()
{    
    
// init scene
    D3DXVECTOR3 dir_to_light(0.0f1.0f0.0f);
    g_terrain 
= new cTerrain(g_device, "coastMountain64.raw"646460.5f);
    g_terrain
->generate_texture(&dir_to_light);

    
// set texture filters
    g_device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
    g_device
->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
    g_device
->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

    
// set camera position    
    g_camera.m_pos = D3DXVECTOR3(100.0f100.0f-250.0f);

    
// create effect

    ID3DXBuffer
* error_buffer;

    HRESULT hr 
= D3DXCreateEffectFromFile(g_device, "FogShader.cxx", NULL, NULL, D3DXSHADER_DEBUG, NULL,
                                          
&g_fog_effect, &error_buffer);

    
// output any error messages
    if(error_buffer)
    {
        MessageBox(NULL, (
char*) error_buffer->GetBufferPointer(), "ERROR", MB_OK);
        safe_release
<ID3DXBuffer*>(error_buffer);
    }

    
if(FAILED(hr))
    {
        MessageBox(NULL, 
"D3DXCreateEffectFromFile() - FAILED""ERROR", MB_OK);
        
return false;
    }
    
    
// save frequently accessed parameter handles
    g_fog_tech_handle = g_fog_effect->GetTechniqueByName("FogTech");
    
    
// set projection
    D3DXMATRIX proj_matrix;
    D3DXMatrixPerspectiveFovLH(
&proj_matrix, D3DX_PI * 0.25f, (float)WIDTH/HEIGHT, 1.0f1000.0f);
    g_device
->SetTransform(D3DTS_PROJECTION, &proj_matrix);
        
    
//g_device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
    
    
return true;
}

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

void cleanup()
{    
    safe_delete
<cTerrain*>(g_terrain);    
    safe_release
<ID3DXEffect*>(g_fog_effect);    
}

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

bool display(float time_delta)
{    
    
// update the scene: allow user to rotate around scene.

    
if(GetAsyncKeyState(VK_UP) & 0x8000f)
        g_camera.walk(
100.0f * time_delta);

    
if(GetAsyncKeyState(VK_DOWN) & 0x8000f)
        g_camera.walk(
-100.0f * time_delta);

    
if(GetAsyncKeyState(VK_LEFT) & 0x8000f)
        g_camera.yaw(
-1.0f * time_delta);
    
    
if(GetAsyncKeyState(VK_RIGHT) & 0x8000f)
        g_camera.yaw(
1.0f * time_delta);

    
if(GetAsyncKeyState('N'& 0x8000f)
        g_camera.strafe(
-100.0f * time_delta);

    
if(GetAsyncKeyState('M'& 0x8000f)
        g_camera.strafe(
100.0f * time_delta);

    
if(GetAsyncKeyState('W'& 0x8000f)
        g_camera.pitch(
1.0f * time_delta);

    
if(GetAsyncKeyState('S'& 0x8000f)
        g_camera.pitch(
-1.0f * time_delta);

    D3DXMATRIX view_matrix;
    g_camera.get_view_matrix(
&view_matrix);
    g_device
->SetTransform(D3DTS_VIEW, &view_matrix);

    
// activate the technique and render

    g_device
->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x00CCCCCC1.0f0);

    g_device
->BeginScene();

    
// set the technique to use
    g_fog_effect->SetTechnique(g_fog_tech_handle);

    UINT num_passes;
    g_fog_effect
->Begin(&num_passes, 0);

    D3DXMATRIX world_matrix;
    D3DXMatrixIdentity(
&world_matrix);

    
for(UINT i = 0; i < num_passes; i++)
    {
        g_fog_effect
->BeginPass(i);

        g_terrain
->draw(&world_matrix, false);        

        g_fog_effect
->EndPass();
    }

    g_fog_effect
->End();
    
    g_device
->EndScene();

    g_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_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_device
->Release();

    
return 0;
}

 


下載源程序


posted on 2008-04-13 11:07 lovedday 閱讀(1330) 評(píng)論(1)  編輯 收藏 引用

評(píng)論

# re: 效果框架(3) 2009-06-03 10:35 fengguo8210@163.com

你寫(xiě)的技術(shù)文檔詳細(xì)且系統(tǒng),是不可多得的學(xué)習(xí)資料,可能的話出書(shū)吧,或者整理一下惠及大眾。  回復(fù)  更多評(píng)論   


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(lèi)(178)

3D游戲編程相關(guān)鏈接

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美激情第三页| 男人的天堂亚洲| 久久免费视频在线| 久久精品国产亚洲5555| 日韩视频中文字幕| 国产偷久久久精品专区| 欧美阿v一级看视频| 欧美一区二区三区免费看 | 久久不射2019中文字幕| 一区三区视频| 国产日韩精品久久| 国产精品丝袜白浆摸在线| 欧美日韩另类丝袜其他| 欧美成人久久| 欧美福利视频在线| 久久夜色精品亚洲噜噜国产mv| 欧美在线观看日本一区| 中文欧美字幕免费| 99国产精品99久久久久久粉嫩| 亚洲黄色在线观看| 午夜视频在线观看一区二区三区 | 亚洲国产老妈| 亚洲欧洲三级电影| 91久久夜色精品国产网站| 1000部精品久久久久久久久| 在线精品视频一区二区三四| 极品中文字幕一区| 亚洲欧洲综合| 在线视频日本亚洲性| 亚洲欧美中文在线视频| 欧美中文字幕视频在线观看| 久久久久久网| 欧美激情一区在线| 99热这里只有精品8| 亚洲影院一区| 麻豆精品国产91久久久久久| 欧美一区日本一区韩国一区| 中文日韩欧美| 亚洲理伦在线| 亚洲欧美欧美一区二区三区| 久久国产福利国产秒拍| 欧美不卡视频一区发布| 欧美日韩国产综合视频在线观看中文| 欧美性大战久久久久久久蜜臀| 国产精品久久久久久久久免费樱桃| 欧美亚韩一区| 国产日韩欧美视频在线| 最新精品在线| 欧美一区二区三区四区在线| 老司机午夜精品| 99综合视频| 久久久久成人网| 欧美色欧美亚洲高清在线视频| 国产欧美一区二区三区久久| 国产精品久久久久久久久| 亚洲成色777777在线观看影院| 欧美日韩成人一区二区三区| 国产亚洲欧美激情| 亚洲人成网站色ww在线| 欧美专区中文字幕| 亚洲激情精品| 欧美一区精品| 国产精品欧美日韩久久| 最新精品在线| 麻豆免费精品视频| 亚洲欧美在线视频观看| 欧美激情亚洲精品| 激情亚洲成人| 香蕉成人伊视频在线观看| 亚洲黄色成人| 另类春色校园亚洲| 狠狠色噜噜狠狠狠狠色吗综合| 狠狠网亚洲精品| 午夜亚洲影视| 在线中文字幕日韩| 欧美日韩国产成人在线免费| 有码中文亚洲精品| 久久夜色撩人精品| 欧美一区二区在线观看| 国产精品一区二区三区成人| 亚洲综合国产激情另类一区| 99国产精品久久久久老师| 欧美激情一区二区在线| 亚洲人成啪啪网站| 欧美国产在线视频| 免费不卡中文字幕视频| 国模精品一区二区三区| 午夜精品剧场| 在线亚洲一区二区| 国产精品久久久久一区二区三区 | 欧美剧在线免费观看网站| 国外成人网址| 欧美影视一区| 亚洲小说春色综合另类电影| 国产精品久久久久久久浪潮网站| 亚洲性线免费观看视频成熟| 午夜宅男久久久| 午夜视频在线观看一区| 国产欧美日韩不卡| 久久精品欧洲| 久久亚洲精品网站| 亚洲国产精品va在看黑人| 久久视频国产精品免费视频在线| 性欧美1819性猛交| 影音先锋亚洲精品| 欧美激情视频免费观看| 欧美成人69av| 亚洲综合日韩| 亚洲欧美日韩一区二区| 激情综合自拍| 亚洲国产成人91精品| 另类激情亚洲| 欧美日韩中文精品| 亚洲欧美日本在线| 久久人人97超碰精品888| 亚洲精品日韩在线观看| 狠狠色综合色综合网络| 亚洲国产精品va| 国产精品v一区二区三区| 久久国产加勒比精品无码| 久久综合一区二区| 亚洲伊人一本大道中文字幕| 羞羞色国产精品| 久久精品在线观看| 欲色影视综合吧| 欧美大胆a视频| 国产精品色婷婷| 亚洲国产另类精品专区| 国产综合婷婷| 一本色道久久综合亚洲精品小说 | 香蕉久久一区二区不卡无毒影院 | 亚洲高清二区| 欧美精品一区二区三区在线看午夜| 亚洲一区二区三区三| 欧美一区观看| 99精品欧美一区二区三区| 羞羞色国产精品| 在线播放日韩专区| 夜夜嗨av色一区二区不卡| 国产日韩一区欧美| 欧美成人激情在线| 欧美日韩精品一区二区三区四区| 欧美一区亚洲| 欧美特黄视频| 亚洲自拍都市欧美小说| 久久在线视频| 欧美在线一二三区| 国产精品成人观看视频国产奇米| 欧美激情中文不卡| 亚洲深夜激情| av成人激情| 免费成人在线观看视频| 久久亚洲国产成人| 国产日韩视频| 午夜亚洲精品| 午夜精品福利视频| 国产精品xvideos88| 一区二区免费在线观看| 日韩小视频在线观看专区| 久久久噜噜噜久久中文字免| 久久久精品一品道一区| 国产精品视频免费在线观看| 一区二区三区高清视频在线观看| 99国产精品久久久久老师| 欧美国产日韩一二三区| 91久久久国产精品| 亚洲精品国精品久久99热一| 免费在线观看精品| 日韩午夜精品视频| 欧美色网在线| 欧美+亚洲+精品+三区| 欧美日韩免费观看一区二区三区 | 国产精品永久| 亚洲国产一区二区a毛片| 欧美顶级大胆免费视频| 永久免费精品影视网站| 久久九九久精品国产免费直播| 久久久国产视频91| 一区二区在线视频播放| 免费成人黄色| 亚洲精选成人| 香蕉视频成人在线观看| 国产欧美精品一区| 久久国产黑丝| 欧美激情bt| 99亚洲一区二区| 欧美午夜激情在线| 亚洲欧美激情精品一区二区| 久久久久久久久综合| 在线视频日韩| 最新国产の精品合集bt伙计| 国产亚洲人成网站在线观看| 欧美美女bbbb| 久久综合给合久久狠狠色| 亚洲视频视频在线| 亚洲成色777777女色窝| 欧美一区二区视频网站| 99视频精品在线| 亚洲国产欧洲综合997久久| 国产日产欧美一区|