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

天行健 君子當自強而不息

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

13

13.4光照

cTerrain::generate_texture方法會調用cTerrain::light_terrain,顧名思義,光照使地形更接近于現實。當我們已經計算完地形紋理以后,我們只需要計算陰影系數(shade factor),使一個定義了光源的地形區域變亮或變暗。你會驚訝于為什么我們照亮地圖卻沒有讓Direct3D來做。我們自己來計算有三個好處:

內存中不必保存頂點法線。

因為紋理是靜態的,所以不能隨意的移動光源。雖然我們可以重新計算光源,但因此采用Direct3D實時的照亮地形是很耗時的。

我們獲得了一些數學上的經驗,熟悉了一些基本的光照概念,并且是用Direct3D函數實踐的。

13.4.1概覽(OVERVIEW)

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

注意:雖然指定方向的光是從光源發射出來的,這么說更直接一點,指定到達光源的反向在計算上要比漫謝光更合得來。

對于地形中的每個方格,我們計算光的向量與方格的面法線之間的角度。

在圖13.7中我們看到,當角度變得比較大時,方格的面離光源越來越遠,接收的光越少。反過來說,角度變小,方格的面則離光源越來越近,相應的會接收更多的光。注意:一旦光向量與法線角度大于90度,表面就接收不到光。

我們能夠創建一個陰影shading)標量,用0..1之間的范圍來表示表面能接收到光的多少。使用陰影標量,角度大則標量接近于0。當顏色與一個陰影標量接近0的值相乘時,得到的結果是:顏色變暗。相反,乘以一個陰影標量的值接近1的值時,顏色則接近于原始亮度。

 

13.4.2 計算方格的陰影(Shade

光源的方向是一個單位向量,為了計算光源方向與面法線間的夾角,首先需要找到面法線,這是叉積的一小部分應用,但首先必須在方格里找到二個共面的非0并且不平行的向量。看圖 13.8有兩個這樣的向量:

 

給指定的格子計算陰影系數用cTerrain::compute_shade方法,它需要參數:行和列來確定方格,還有平行方向光的光源。

    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

一旦知道了如何給指定的方格加陰影,我們就能給地形上所有的方格加陰影。只要遍例每一個方格,計算方格的陰影值,并測量方格對應的texel顏色。光照少則方格會變暗。
    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) 評論(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>
            国产亚洲欧美一区在线观看| 老司机免费视频一区二区| 国产精品女主播| 欧美日韩国产在线一区| 牛牛影视久久网| 久久久精品五月天| 久久精品国产视频| 亚洲欧美日韩电影| 欧美一区二区视频97| 夜夜嗨av一区二区三区免费区| 在线播放豆国产99亚洲| 亚洲黄色在线观看| 亚洲天堂免费观看| 久久精品国产91精品亚洲| 麻豆精品国产91久久久久久| 亚洲电影中文字幕| 亚洲高清av| 99精品国产高清一区二区| 中文av字幕一区| 久久久噜噜噜久久人人看| 欧美激情二区三区| 国产欧美一区二区三区久久| 伊人激情综合| 亚洲午夜国产成人av电影男同| 欧美一区二区三区的| 老牛影视一区二区三区| 亚洲日本欧美天堂| 久久国产主播| 欧美日韩亚洲在线| 在线精品视频在线观看高清| 一区二区日韩| 欧美日韩精品免费观看| 国产一区二区三区四区老人| 亚洲美女精品久久| 久久亚裔精品欧美| 一区二区三区久久网| 久久久美女艺术照精彩视频福利播放 | 一本久道久久综合婷婷鲸鱼| 亚洲制服丝袜在线| 欧美人交a欧美精品| 黄色免费成人| 亚洲欧美综合精品久久成人| 亚洲国产视频一区| 久久精品首页| 国产日韩欧美视频| 亚洲一区二区三区涩| 欧美激情偷拍| 久久夜色精品国产欧美乱极品| 国产精品日韩欧美一区二区| 亚洲久色影视| 亚洲国产成人tv| 久久久蜜桃一区二区人| 国产中文一区二区三区| 午夜一区二区三区在线观看 | 亚洲国产成人精品久久久国产成人一区| 亚洲婷婷免费| 欧美午夜电影网| 亚洲一二三四区| 一区二区三区在线免费观看 | 午夜亚洲伦理| 国产精品丝袜xxxxxxx| 亚洲无线观看| 夜夜嗨av一区二区三区四区| 每日更新成人在线视频| 国产精品免费小视频| 午夜视频久久久久久| 一区二区国产在线观看| 国产精品国产三级欧美二区| 一区二区三区精品视频| 亚洲精品黄色| 欧美午夜欧美| 欧美亚洲日本国产| 亚洲性图久久| 国产乱码精品1区2区3区| 亚洲精品影院在线观看| 欧美专区中文字幕| 在线亚洲高清视频| 欧美日韩一二区| 一本一本久久a久久精品综合妖精| 亚洲大片av| 欧美日韩国产不卡| 亚洲一二三区精品| 午夜精品久久久久久久| 国产精品一区二区欧美| 久久精品日韩一区二区三区| 久久不射2019中文字幕| 影音先锋日韩有码| 亚洲福利视频三区| 国产精品九九| 久热精品视频在线观看| 亚洲精品社区| 欧美四级伦理在线| 国产精品va在线播放我和闺蜜| 欧美影院久久久| 亚洲欧美电影院| 亚洲一区欧美激情| 国产在线视频欧美一区二区三区| 久久综合久久综合这里只有精品| 美女国产一区| 亚洲欧美区自拍先锋| 欧美在线观看一区二区| 国语自产精品视频在线看| 亚洲国产高清在线观看视频| 国产精品www994| 欧美xxx成人| 国产精品久久久久9999| 久久婷婷人人澡人人喊人人爽| 久久精品成人一区二区三区蜜臀| 久久香蕉国产线看观看网| 国产精品国产三级国产普通话蜜臀| 欧美在线观看www| 免费视频一区| 久久国产手机看片| 亚洲欧洲综合另类| 欧美在线网址| 夜夜嗨av一区二区三区四区 | 日韩一区二区高清| 亚洲欧美亚洲| 亚洲一区二区三区色| 欧美成年人网站| 美女在线一区二区| 国产精品日韩欧美综合| 最新日韩在线视频| 亚洲大片av| 久久久www| 欧美在线免费观看| 欧美亚州一区二区三区 | 亚洲色图综合久久| 亚洲精品乱码久久久久久日本蜜臀| 亚洲欧美在线观看| 亚洲香蕉网站| 欧美国产日韩xxxxx| 欧美国产精品日韩| 亚洲高清免费在线| 久久免费视频这里只有精品| 久久黄色小说| 国产一区二区精品丝袜| 亚洲天堂av在线免费观看| 一区二区三区欧美日韩| 免费在线日韩av| 亚洲第一视频| 日韩一区二区高清| 欧美另类在线播放| 亚洲美女区一区| 亚洲天堂视频在线观看| 欧美日韩成人免费| 亚洲精品一区久久久久久| 亚洲视频国产视频| 国产精品v欧美精品v日韩| 亚洲一区二区影院| 久久精品国产综合| 在线免费观看成人网| 美玉足脚交一区二区三区图片| 欧美国产日产韩国视频| 亚洲美女在线国产| 欧美日韩直播| 亚洲欧美国产精品va在线观看| 欧美一区二区三区电影在线观看| 国产亚洲成av人片在线观看桃| 久久国内精品自在自线400部| 欧美福利视频一区| 一区二区精品在线| 国产精品自拍视频| 久久久www免费人成黑人精品| 亚洲第一在线| 亚洲综合不卡| 狠狠色丁香久久综合频道| 美日韩丰满少妇在线观看| 亚洲精品一线二线三线无人区| 亚洲综合精品自拍| 精品不卡视频| 欧美日韩伦理在线| 欧美中文在线字幕| 亚洲精品永久免费精品| 亚洲欧美电影在线观看| 一区二区在线不卡| 欧美午夜视频在线| 久久人人97超碰国产公开结果| 亚洲精品视频在线观看免费| 久久激情五月激情| 你懂的网址国产 欧美| 宅男在线国产精品| 国产日韩在线视频| 欧美福利在线观看| 亚洲在线免费| 91久久久久久| 久久人体大胆视频| 亚洲午夜av在线| 在线观看av不卡| 国产精品欧美日韩一区二区| 男同欧美伦乱| 欧美在线高清视频| 国产精品99久久久久久宅男| 亚洲国产经典视频| 乱码第一页成人| 欧美在线free| 亚洲一区二区四区| 日韩视频中午一区| 在线免费高清一区二区三区| 国产精品乱子久久久久|