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

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

D3D中的地形繪制基礎(chǔ)(3)

13

13.4光照

cTerrain::generate_texture方法會(huì)調(diào)用cTerrain::light_terrain,顧名思義,光照使地形更接近于現(xiàn)實(shí)。當(dāng)我們已經(jīng)計(jì)算完地形紋理以后,我們只需要計(jì)算陰影系數(shù)(shade factor),使一個(gè)定義了光源的地形區(qū)域變亮或變暗。你會(huì)驚訝于為什么我們照亮地圖卻沒(méi)有讓Direct3D來(lái)做。我們自己來(lái)計(jì)算有三個(gè)好處:

內(nèi)存中不必保存頂點(diǎn)法線。

因?yàn)榧y理是靜態(tài)的,所以不能隨意的移動(dòng)光源。雖然我們可以重新計(jì)算光源,但因此采用Direct3D實(shí)時(shí)的照亮地形是很耗時(shí)的。

我們獲得了一些數(shù)學(xué)上的經(jīng)驗(yàn),熟悉了一些基本的光照概念,并且是用Direct3D函數(shù)實(shí)踐的。

13.4.1概覽(OVERVIEW)

光照是計(jì)算地形陰影shade)的一個(gè)最基本的技巧之一,一般認(rèn)為的光是漫射光(diffuse lighting),給定一個(gè)平行光源,我們用“到達(dá)光源的方向(direction to light)”(該光源發(fā)出的平行光的傳播方向的反方向)。因此,如果我們想讓光線從空中筆直落下,那么lightRaysDirection = (0, -1, 0),按相反的方向:directionToLight = (0, 1, 0)。注意:創(chuàng)建光照向量要使用單位向量。

注意:雖然指定方向的光是從光源發(fā)射出來(lái)的,這么說(shuō)更直接一點(diǎn),指定到達(dá)光源的反向在計(jì)算上要比漫謝光更合得來(lái)。

對(duì)于地形中的每個(gè)方格,我們計(jì)算光的向量與方格的面法線之間的角度。

在圖13.7中我們看到,當(dāng)角度變得比較大時(shí),方格的面離光源越來(lái)越遠(yuǎn),接收的光越少。反過(guò)來(lái)說(shuō),角度變小,方格的面則離光源越來(lái)越近,相應(yīng)的會(huì)接收更多的光。注意:一旦光向量與法線角度大于90度,表面就接收不到光。

我們能夠創(chuàng)建一個(gè)陰影shading)標(biāo)量,用0..1之間的范圍來(lái)表示表面能接收到光的多少。使用陰影標(biāo)量,角度大則標(biāo)量接近于0。當(dāng)顏色與一個(gè)陰影標(biāo)量接近0的值相乘時(shí),得到的結(jié)果是:顏色變暗。相反,乘以一個(gè)陰影標(biāo)量的值接近1的值時(shí),顏色則接近于原始亮度。

 

13.4.2 計(jì)算方格的陰影(Shade

光源的方向是一個(gè)單位向量,為了計(jì)算光源方向與面法線間的夾角,首先需要找到面法線,這是叉積的一小部分應(yīng)用,但首先必須在方格里找到二個(gè)共面的非0并且不平行的向量??磮D 13.8有兩個(gè)這樣的向量:

 

給指定的格子計(jì)算陰影系數(shù)用cTerrain::compute_shade方法,它需要參數(shù):行和列來(lái)確定方格,還有平行方向光的光源。

    float cTerrain::compute_shade(int cell_row, int cell_col, D3DXVECTOR3* dir_to_light)
    {
        
// get heights of three vertices on the quad
   
    float height_a = get_height_map_entry(cell_row,   cell_col);
        
float height_b = get_height_map_entry(cell_row,   cell_col+1);
        
float height_c = get_height_map_entry(cell_row+1, cell_col);
   
        
// build two vectors on the quad
   
        D3DXVECTOR3 u(m_cell_spacing, height_b - height_a, 0.0f);
        D3DXVECTOR3 v(0.0f,              height_c - height_a, -m_cell_spacing);
   
        
// find the normal by taking the cross product of two vectors on the quad
   
    D3DXVECTOR3 n;
        D3DXVec3Cross(&n, &u, &v);
        D3DXVec3Normalize(&n, &n);
   
        
float cosine = D3DXVec3Dot(&n, dir_to_light);
   
        
if(cosine < 0.0f)
            cosine = 0.0f;
   
        
return cosine;
    }

13.4.3 地形陰影(Shading

一旦知道了如何給指定的方格加陰影,我們就能給地形上所有的方格加陰影。只要遍例每一個(gè)方格,計(jì)算方格的陰影值,并測(cè)量方格對(duì)應(yīng)的texel顏色。光照少則方格會(huì)變暗。
    bool cTerrain::light_terrain(D3DXVECTOR3* dir_to_light)
    {
        D3DSURFACE_DESC texture_desc;
        m_texture->GetLevelDesc(0, &texture_desc);
   
        
// make sure we got the requested format because our code that fills the texture is
        // hard coded to a 32 bit pixel depth.
   
    if(texture_desc.Format != D3DFMT_X8R8G8B8)
            
return false;
   
        D3DLOCKED_RECT locked_rect;
        m_texture->LockRect(0, &locked_rect, NULL, 0);
   
        DWORD* image_data = (DWORD*) locked_rect.pBits;
   
        
for(UINT row = 0; row < texture_desc.Height; row++)
        {
            
for(UINT col = 0; col < texture_desc.Width; col++)
            {
                
// Index into texture, note we use the pitch and divide by four since the pitch is given
                // in bytes and there are 4 bytes per DWORD.
   
            int index = row * (locked_rect.Pitch / 4) + col;
   
                
// get current color of quad
   
                D3DXCOLOR color(image_data[index]);
   
                
// shade current quad
   
                color *= compute_shade(row, col, dir_to_light);
   
                
// save shade color
   
                image_data[index] = (D3DCOLOR) color;
            }
        }
   
        m_texture->UnlockRect(0);
   
        
return true;
    }

posted on 2008-04-02 20:31 lovedday 閱讀(1511) 評(píng)論(0)  編輯 收藏 引用


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


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(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>
            亚洲视频狠狠| 欧美日韩精品国产| 日韩视频精品在线| 亚洲精品久久久久| 欧美成人网在线| 亚洲国产精品成人精品| 亚洲精品美女91| 艳妇臀荡乳欲伦亚洲一区| 亚洲国产欧美日韩| 亚洲精品婷婷| a91a精品视频在线观看| 99热免费精品| 亚洲欧美国产精品桃花| 久久精品一二三区| 欧美激情一区二区三区在线视频观看| 欧美午夜一区二区福利视频| 国模一区二区三区| 99精品视频免费| 久久国产毛片| 亚洲靠逼com| 久久久天天操| 国产精品qvod| 亚洲国产毛片完整版| 亚洲已满18点击进入久久| 另类成人小视频在线| 国产日韩亚洲欧美综合| 老司机午夜精品视频在线观看| 欧美激情一二区| 国内成+人亚洲+欧美+综合在线| 99xxxx成人网| 女女同性精品视频| 亚洲男人的天堂在线| 欧美精品在线免费播放| 狠狠色伊人亚洲综合成人| 亚洲免费视频中文字幕| 欧美黄色大片网站| 久久国产精品久久久久久| 欧美色偷偷大香| 亚洲人屁股眼子交8| 久久婷婷久久| 欧美一区二区在线视频| 国产精品久久中文| 一区二区三区免费观看| 欧美成人精品一区二区| 欧美一区高清| 国产日产高清欧美一区二区三区| 亚洲深夜福利| 日韩午夜三级在线| 欧美精品尤物在线| av不卡在线| 亚洲黄网站在线观看| 麻豆成人综合网| 一区二区视频在线观看| 久久久久女教师免费一区| 欧美一区二区黄色| 国内揄拍国内精品少妇国语| 欧美主播一区二区三区美女 久久精品人| 亚洲精品一二| 欧美日韩麻豆| 亚洲男女自偷自拍图片另类| 一区二区三区四区五区在线| 国产精品成人免费视频| 亚洲免费影视第一页| 亚洲一区二区综合| 国产精品一区二区你懂得 | 久久蜜桃av一区精品变态类天堂| 国产精品乱看| 欧美在线视频一区二区| 欧美一区二区免费观在线| 国产精品外国| 久久精品日产第一区二区三区| 欧美一级午夜免费电影| 国产一区成人| 老司机精品视频一区二区三区| 久久免费国产精品1| 亚洲欧洲精品一区| 亚洲美女精品成人在线视频| 国产精品久久久久久久app| 欧美一区二区三区播放老司机| 午夜久久资源| 亚洲第一在线视频| 日韩图片一区| 国语精品一区| 亚洲日本电影| 久久精品亚洲一区| 一本色道久久综合亚洲精品不| 国产精品久久9| 久久女同精品一区二区| 欧美激情按摩| 久久高清免费观看| 欧美激情中文字幕在线| 亚洲欧美另类久久久精品2019| 欧美在线视频播放| 一本久道综合久久精品| 小嫩嫩精品导航| 亚洲美女视频在线观看| 午夜精品久久| 国产精品99久久久久久宅男| 久久精品国产精品 | 午夜精品在线观看| 欧美**人妖| 久久久久国产精品一区二区| 欧美激情国产日韩| 久久另类ts人妖一区二区| 欧美精品久久久久久| 久久久之久亚州精品露出| 欧美午夜美女看片| 欧美激情一二区| 国内精品99| 午夜精品成人在线视频| 亚洲一区二区三区在线看| 免费在线亚洲| 久久中文字幕导航| 国产精品网站在线| 亚洲精品国产视频| 亚洲激情啪啪| 裸体一区二区三区| 久久尤物电影视频在线观看| 国产精品私拍pans大尺度在线| 亚洲区欧美区| 亚洲九九九在线观看| 久久久久久久一区二区| 久久精品亚洲国产奇米99| 欧美日韩中文精品| 亚洲精品久久久一区二区三区| 亚洲国产日韩综合一区| 久久青青草综合| 欧美va亚洲va日韩∨a综合色| 韩日精品视频一区| 久久精品视频免费| 麻豆精品在线观看| 亚洲国产精品电影在线观看| 麻豆精品精华液| 亚洲国产国产亚洲一二三| 亚洲电影毛片| 你懂的国产精品永久在线| 欧美大片在线观看| 亚洲国产日韩欧美在线99| 久热国产精品| 亚洲高清中文字幕| 一本久久综合亚洲鲁鲁| 欧美日韩一区二区三区在线视频| 亚洲另类一区二区| 亚洲欧美国产一区二区三区| 国产精品揄拍一区二区| 久久爱91午夜羞羞| 欧美顶级艳妇交换群宴| 日韩亚洲欧美精品| 欧美日韩一区二区免费视频| 夜夜嗨网站十八久久| 亚洲自拍偷拍麻豆| 免费成人高清视频| 狠狠色综合播放一区二区| 久久天天躁狠狠躁夜夜爽蜜月| 欧美成人免费在线| 亚洲欧洲一二三| 欧美激情视频一区二区三区在线播放| 亚洲精选大片| 欧美在线首页| 91久久国产综合久久蜜月精品| 欧美精品亚洲二区| 亚洲欧美一区二区三区久久| 嫩模写真一区二区三区三州| 99精品国产一区二区青青牛奶| 国产精品午夜视频| 久久久青草青青国产亚洲免观| 亚洲精品老司机| 久久久精品国产免费观看同学| 亚洲精品乱码久久久久| 国产精品综合不卡av| 男人的天堂成人在线| 亚洲一区日韩| 亚洲电影天堂av| 欧美在线亚洲综合一区| 日韩视频在线一区二区| 国产日产欧美a一级在线| 美女久久一区| 性一交一乱一区二区洋洋av| 亚洲精品国产精品乱码不99按摩 | 久久躁狠狠躁夜夜爽| 国产精品99久久久久久www| 国产在线观看91精品一区| 欧美日韩亚洲一区二区三区在线观看| 午夜免费电影一区在线观看| 亚洲欧洲在线播放| 久热精品视频在线观看| 亚洲欧美日韩一区二区在线| 亚洲日本中文| 国产视频欧美视频| 欧美理论在线播放| 麻豆av一区二区三区| 欧美一区高清| 亚洲欧美日韩爽爽影院| 一个色综合导航| 亚洲国产美女| 欧美国产专区| 欧美国产一区视频在线观看| 蜜臀久久99精品久久久久久9| 久久精品日产第一区二区| 午夜精品视频网站|