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

天行健 君子當(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>
            亚洲日本国产| 午夜国产一区| 欧美激情一区二区三区不卡| 性欧美精品高清| 午夜精品一区二区三区在线播放| 亚洲黄色高清| 久久精品99国产精品| 欧美主播一区二区三区| 一区二区日韩欧美| 亚洲一区二区三区免费视频| 宅男精品视频| 久久成人国产精品| 蜜臀av在线播放一区二区三区| 韩日成人av| 亚洲国产成人tv| 日韩视频在线观看一区二区| 亚洲免费视频成人| 狠狠狠色丁香婷婷综合激情| 亚洲永久免费av| 午夜精品免费在线| 亚洲欧美日韩国产一区二区| 欧美在线观看视频| 欧美精品国产精品日韩精品| 欧美午夜在线一二页| 国内精品久久久久影院 日本资源| 久久青青草原一区二区| 老司机午夜精品视频在线观看| 亚洲国产日韩欧美在线99| 免费高清在线视频一区·| 亚洲毛片在线看| 久久蜜桃精品| 国产精品久久一卡二卡| 亚洲国产高清视频| 久久激情五月激情| 夜夜狂射影院欧美极品| 免费视频一区二区三区在线观看| 欧美一区免费| 欧美不卡视频一区发布| 国产一区91| 亚洲欧美日韩第一区| 亚洲国产成人av| 久久免费99精品久久久久久| 国产精品一区二区三区久久| 国产精品99久久久久久宅男| 欧美成人亚洲成人日韩成人| 午夜国产精品影院在线观看| 欧美日韩一区二区在线观看| 在线日韩中文字幕| 久久久久久久久蜜桃| 亚洲图片欧洲图片av| 欧美日韩一卡| 在线亚洲精品| 99国产精品自拍| 欧美激情第3页| 亚洲精品美女免费| 欧美高清在线视频| 久久综合九色| 亚洲韩日在线| 奶水喷射视频一区| 久久视频精品在线| 国模大胆一区二区三区| 久久成人一区| 久久国产精品黑丝| 国产伊人精品| 蜜桃伊人久久| 久久网站免费| 亚洲第一狼人社区| 欧美成年网站| 农村妇女精品| 亚洲最新视频在线| 亚洲麻豆国产自偷在线| 欧美日韩大片一区二区三区| 一区二区三区四区蜜桃| 日韩一级二级三级| 国产精品极品美女粉嫩高清在线| 国产丝袜一区二区| 欧美福利网址| 久久亚洲图片| 亚洲欧洲精品成人久久奇米网| 国内精品免费午夜毛片| 欧美夜福利tv在线| 欧美一进一出视频| 亚洲国产日韩在线| 亚洲国产综合在线| 欧美成人亚洲| 亚洲一区二区视频在线观看| 亚洲视屏在线播放| 国产亚洲永久域名| 欧美www在线| 欧美日韩一区三区| 欧美综合第一页| 久久久91精品国产| 99精品热视频| 亚洲欧美中日韩| 亚洲国产精品成人精品| 一本大道久久a久久综合婷婷| 久久久成人精品| 亚洲福利国产| 9i看片成人免费高清| 国产精品日韩欧美一区| 欧美~级网站不卡| 国产精品久久久久久久久久久久久久| 亚洲高清在线观看| av成人激情| 伊人精品成人久久综合软件| 欧美国内亚洲| 国产精品乱码一区二区三区| 久久精品一区二区国产| 欧美日韩国语| 欧美α欧美αv大片| 国产精品乱人伦中文| 亚洲国产日本| 在线视频国产日韩| 欧美专区一区二区三区| 亚洲一品av免费观看| 免费一级欧美片在线观看| 久久精品国产69国产精品亚洲| 亚洲人成网站777色婷婷| 欧美黄色小视频| 国产乱人伦精品一区二区| 欧美黄色一级视频| 国产日韩欧美在线播放不卡| 91久久夜色精品国产九色| 黄色成人免费网站| 亚洲一区二区动漫| 在线视频亚洲欧美| 欧美本精品男人aⅴ天堂| 欧美一站二站| 欧美日韩视频在线一区二区观看视频| 亚洲激情影视| 久久久国产精品一区| 欧美在线免费观看| 国产精品成人观看视频国产奇米| 中国成人在线视频| 久久躁日日躁aaaaxxxx| 另类av导航| 在线播放精品| 久久久噜噜噜久久中文字免| 久久嫩草精品久久久久| 日韩一级片网址| 一区二区久久久久| 亚洲九九爱视频| 欧美成年视频| 欧美1区视频| 激情综合在线| 女女同性精品视频| 91久久嫩草影院一区二区| 亚洲欧洲三级电影| 欧美理论在线| 一区二区高清视频| 亚洲一区二区不卡免费| 国产精品乱码| 小辣椒精品导航| 噜噜噜躁狠狠躁狠狠精品视频| 欧美成人精品不卡视频在线观看 | 久久九九久精品国产免费直播| 国产亚洲精品一区二555| 亚洲素人一区二区| 欧美一区二区啪啪| 欧美激情一区二区三区四区| 欧美大片免费久久精品三p | 老司机久久99久久精品播放免费 | 麻豆精品91| 亚洲欧美三级伦理| 久久久久国色av免费观看性色| 久久综合九色九九| 亚洲第一综合天堂另类专| 亚洲美女视频网| 欧美日韩午夜在线| 性久久久久久| 亚洲高清三级视频| 宅男精品导航| 国产日韩欧美夫妻视频在线观看| 亚洲激情网站免费观看| 在线一区二区三区四区五区| 国产精品久久77777| 久久久久久夜精品精品免费| 亚洲国产高清aⅴ视频| 亚洲在线一区| 亚洲国产精品久久久久婷婷884| 亚洲一区二区在线免费观看| 欧美在线观看视频一区二区三区 | 国模精品一区二区三区| 嫩草国产精品入口| 亚洲欧美亚洲| 欧美黄污视频| 久久精品亚洲| 亚洲在线一区| 日韩午夜av电影| 一区久久精品| 国产偷国产偷精品高清尤物| 欧美屁股在线| 毛片一区二区三区| 欧美亚洲网站| 亚洲一区二区视频| 亚洲精品一区二区三区av| 久久伊人免费视频| 亚洲欧美日韩人成在线播放| 亚洲欧美在线看| 香蕉乱码成人久久天堂爱免费|