日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

环境贴图

發布時間:2023/12/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 环境贴图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
教程:實時環境映射貼圖技術實時環境映射貼圖技術(Real-time Evironmnet Mapping)

如果你是個賽車游戲的愛好者,你一定玩過風靡全世界的賽車游戲《極品飛車:地下狂飚2

》 (Need For Speed : UnderGround2)。在這款游戲中,玩家扮演了一個靠賽車為生的地下飚

車手,在永遠是夜晚的城市中飛馳。這款游戲大量地運用了環境映射技術(Real-time

Evironmnet Mapping),例如下過雨的公路上看到兩旁夜景的倒映、玩家車身上對周圍環境的真

實反射等等,這些都是環境映射技術的功勞。這種最酷、最華麗的特效現在已經被應用在大量

實時虛擬顯示游戲中,將來它也許會成為游戲中必不可少的元素。

環境映射貼圖技術最典型的應用就是車體的“流光”,這種現象在現實中非常普遍。當你

開著車行駛在滿是霓虹燈的街道上時,周圍的燈光會在車身上投射出一個光斑或光帶(前提是車

子洗得非常干凈)。當車子在街道上飛馳的時候,就好像一個個五彩的斑點在你的車體上流動,

產生非常炫目的效果。甚至當你和別的車子擦肩而過時,別的車子也會映射在你的車體上。

要實現環境貼圖映射首先需要一組環境信息。假設在場景里有一輛車(本文中將一直使用這

個的例子),車的環境信息,即除車以外,你在車的位置上向四周看到的全部畫面。你用相機對

六個不同方向拍出六張照片,這樣就產生了一組環境信息。車上的每個象素都和這個環境信息

中的一個點有對應關系(也就是所謂的映射)。在最后渲染車時,需要把車身上每個環境對應點

與車體本身的效果做混合處理。

歸納起來要實現環境貼圖映射需要執行以下步驟:

A.創建環境貼圖

B.把場景中的物體渲染到環境貼圖上

C.渲染車體時,把原始貼圖和環境貼圖經過處理后最終渲染到屏幕上

準備好你的車子了嗎?你一定想馬上體驗一下給自己車子打上環境貼圖是什么感覺吧!不

過在動手之前,你還需要對相關知識有所了解,否則是很難找到正確方法的。

一、什么是環境貼圖?

在上面我用照相機作過比喻,在這個比喻中,那六張照片就類似一組環境貼圖,它們代表

了立方體的六個面。你可以想象一下,當你的眼睛處于這個立方體時,你會看到周圍所有的景

物,因此我們將面,每次繪制其中一個面,就要對場景中所有的景物進行一次渲染。這個過程的開銷是十分大

的。如果你的場景中某個物體上使用了環境映射,那么原來只需繪制一次的場景,就會增加6倍

的渲染消耗!如果一個游戲原來跑70幀,當繪制一個使用了環境映射的特效時,馬上降到了10

幀!這是一個相當可怕的數字!你也許會考慮:那么這項技術會不會因為開銷太大而失去使用

的價值?答案是不會的。以目前人類的智慧已經可以非常好的處理好環境映射的效率問題,所

以不必擔心,而且在后文中我們還會詳細講解這些方法。

三、如何使用Cube Map?

當你渲染好了貼圖坐標,下一步就是如何使用的問題了。要想將一張貼圖繪制到屏幕上,

就需要用坐標和模型的頂點進行對應。我們都知道,2D貼圖使用u、v兩個坐標來表示頂點對應

的貼圖坐標。而在Cube Map中,僅有2個量是無法表示一個點在立方體中的位置的,所以,Cube Map的貼圖坐標是由3個數的向量來表示的,你可以簡單把這個貼圖坐標對應的顏色理解為:從

盒子中心向這個3D向量方向前進直至與盒子相交,其交點的象素顏色值。比如你要讓場景中的一個球映射出周圍的環境,最簡單的做法是把球上每個點的它們稱為環境貼圖。
一般來說我們所使用的環境貼圖都是用立方體作參照,因此通常稱為立方體貼圖(Cube Map)。
每個Cube Map包含六個面,在DirectX中分別用+X、-X、+Y、-Y、+Z、-Z來表示,其每個面都在

水平和垂直平面上都覆蓋了90度的視角。

二、我們要如何操作這組Cube Map呢?

在DirectX 9中,分別使用了六個不同的標識來表示Cube Map中的各個面。這組標識叫

D3DCUBEMAP_FACES,其中的D3DCUBEMAP_FACE_POSITIVE_X就代表了Cube Map中以中心點為原點

的正X軸所指向的那個面,依此類推。而Cube Map的每一個面都是一個LPDIRECT3DSURFACE9對象

,當你需要對其中某個面進行某些操作時,就需要先調用GetCubeMapSurface函數來得到你所指

定的那個面(Surface),然后像操作一般面一樣操作即可。而本文中將要對其進行的操作就是把

面作為渲染目標(Render Target),把周圍環境中的景物全部繪制到這個Cube Map上。因為Cube Map在每個方向上有一個法線做為貼圖坐標傳給圖形處理芯片,這樣一來就能讓球具有金屬質感。不過,僅僅這樣簡單

對應的話,繪制出的圖將會和現實世界的映射有所出入。

我的網站設計 web design home page
[url]http://www.webdesign-cn.com[/url]
[url]http://www.webdesign-china.cn[/url]

總結

以上是生活随笔為你收集整理的环境贴图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。