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

            麒麟子

            ~~

            導(dǎo)航

            <2011年5月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統(tǒng)計(jì)

            常用鏈接

            留言簿(12)

            隨筆分類

            隨筆檔案

            Friends

            WebSites

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            為DEMO加入霧化效果

            霧化效果

            首先來看看我們可以設(shè)置哪些參數(shù)
            1、D3DFOGSTART、D3DFOGEND表示霧的起始和結(jié)束距離
            2、D3DFOGDENSITY 霧的濃度
            3、D3DFOGCOLOR 霧的顏色
            4、D3DFOGTABLEMODE、D3DFOGVERTEXMODE 霧的模式,第一個為像素霧化,第二個為頂點(diǎn)霧化


            首先看看霧化的方程

            Color = f * Color(scene) + (1-f) * color(fog)

            Color(scene):背景色
            Color(fog): 霧色
            f:霧化參數(shù),隨觀察點(diǎn)的距離的增大而減小,從而可知最后得到的顏色,當(dāng)觀察點(diǎn)越遠(yuǎn)時,霧色占的比例越大。

            霧有四種方式
            D3DFOG_NONE 禁用霧化效果
            D3DFOG_EXP  霧化效果隨指數(shù)增加 f = 1/(e^density)
            D3DFOG_EXP2 同上,不過公式變?yōu)?f = 1/(e^(density^2))
            D3DFOG_LINEAR 線性霧 f = (end-d)/(end-start) d 為當(dāng)前計(jì)算點(diǎn)與觀察點(diǎn)距離

            現(xiàn)在我們來看如何實(shí)現(xiàn)霧化
            首先開啟霧化效果
            Device->SetRenderState(D3DRS_FOGENABLE,true);
            然后我們要設(shè)置霧化的模式和公式
            Device->SetRenderState(DEDRS_FOGTABLEMODE,D3DFOG_LINEAR);
            這里我將其設(shè)置成了像素霧和線性,同樣可以將其換成上面介紹的其它模式和公式
            接下來我們就要設(shè)置霧化參數(shù)了
            Device->SetRenderState(D3DRS_FOGCOLOR,oxffffffff);//設(shè)置成白色

            設(shè)置start end
            float start= 50,end = 400;
            Device->SetRenderState(D3DRS_FOGSTART,*(DWORD*)&start);
            Device->SetRenderState(D3DRS_FOGEND,*(DWORD*)&end);
            設(shè)置濃度
            float density = 0.001f;//0.0 -- 1.0
            Device->SetRenderState(D3DRS_FOGDENSITY,*(DWORD*)&density);

            這樣,我們的設(shè)置就完了,只要將霧化設(shè)置放入我們渲染場景中,就可以看到霧化效果了.
            但應(yīng)該注意以下幾點(diǎn)
            -----------------------------------------line
               A          B          C
                \          |             /
                 \                     /
                   \       |         /
                    \              /
                     \    d     /
                      \        /
                       \   |  /
                        \   /
                          P
            ------------------------------------------
            霧化效果是以剛剛上面講的 d 作為計(jì)算標(biāo)準(zhǔn),所以,我們從P點(diǎn)看到A ,B ,C三點(diǎn)的霧化效果是一樣的,而按常理,A ,C的霧應(yīng)該更濃才對.
            很顯然,這讓我們想到,D3D會有對應(yīng)的處理辦法.
            D3D提供了基于發(fā)散的霧化效果,霧化隨觀察點(diǎn)的距離增大而增大,就像點(diǎn)光源,不過,這要求我們的硬件支持,所以在設(shè)置前應(yīng)該檢查
            D3DCAPS9 caps;
            Device->GetDeviceCaps(&caps);

            if(caps.RasterCaps&D3DPRASTERCAPS_FOGRANGE)
             Device->SetRenderState(D3DRS_RANGEFOGENABLE,true);

            把這個增加到霧化設(shè)置中即可~~~

            已經(jīng)12點(diǎn)了,估計(jì)人有點(diǎn)暈,也講不明白些什么東西了,到此為止

             


             

            posted on 2009-04-20 11:58 麒麟子 閱讀(640) 評論(0)  編輯 收藏 引用 所屬分類: DirectX

            国产亚洲精午夜久久久久久| 久久亚洲中文字幕精品一区四| 伊人热热久久原色播放www | 久久99精品国产麻豆宅宅| 精品国产乱码久久久久久人妻 | 久久国产精品视频| 日本五月天婷久久网站| 2021少妇久久久久久久久久| 免费精品久久久久久中文字幕| 无码AV中文字幕久久专区| 国产—久久香蕉国产线看观看| 漂亮人妻被中出中文字幕久久| 久久精品视频网| 国产aⅴ激情无码久久| 久久国产香蕉一区精品| 97久久香蕉国产线看观看| 伊色综合久久之综合久久| 久久99精品久久久久久9蜜桃| 久久精品中文字幕无码绿巨人| 色婷婷久久久SWAG精品| 久久久久AV综合网成人| 久久天天躁狠狠躁夜夜不卡 | 精品久久久久久久| 无码久久精品国产亚洲Av影片| 日韩影院久久| 性做久久久久久久久久久| 久久精品国产99久久丝袜| 国产精品久久久久天天影视| 久久久久亚洲AV无码永不| 久久久久久精品久久久久| 伊人 久久 精品| 久久精品中文字幕一区| 奇米影视7777久久精品人人爽| 中文字幕无码久久人妻| 一本久道久久综合狠狠躁AV| 三级韩国一区久久二区综合| 日韩电影久久久被窝网| 久久精品综合网| 久久人妻少妇嫩草AV无码专区| 亚洲精品无码成人片久久| 亚洲精品国产字幕久久不卡|