天空盒、水面和紋理動畫.ppt_第1頁
天空盒、水面和紋理動畫.ppt_第2頁
天空盒、水面和紋理動畫.ppt_第3頁
天空盒、水面和紋理動畫.ppt_第4頁
天空盒、水面和紋理動畫.ppt_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

天空盒,李巍,天空的種類,目前描述“天空”的技術主要包括三種類型: 平板型天空(Sky Plane),僅用一個平板放到頭頂。 天空穹(Sky Dome),放到頭頂的是一個曲面。 天空盒(Sky Box),放到場景的是一個立方體。,天空的種類,天空盒經常是由六個面組成的立方體,并經常會隨著視點的移動而移動。 天空盒將刻畫極遠處人無法達到的位置的景物。,天空盒的實現,與D3D實現的普通立方體不同的一點是,大部分情況下我們視點都包容在天空盒內部,因此,天空盒的頂點順序應當是正好與普通立方體的頂點順序相反。,天空盒的實現,最簡單的天空盒,只需要填寫好六個面的24個頂點,最后為每個面貼上紋理即可。 CODE 請注意渲染的時候的一些細節(jié):紋理狀態(tài)的重設、渲染狀態(tài)的重設。,天空盒的一些雜論,天空盒對于程序員并不是困難的事情,但是真正要在程序中使得天空“好看”,那么,還需要美工的共同參與。 天空穹相對而言表現力更好一些。魔獸世界就是采用了這種方法。,天空盒的一些雜論,對于并不太注意遠景的場景,用天空板也不失為一種辦法。在這種情況下,純色的霧將覆蓋整個遠景,使得遠處充滿神秘。,天空盒的一些雜論,在高級一些的應用中,天空盒的紋理可能同時會用來生成Cube Map,并用之來做水面倒影、云影、反光等很眩的特效。,天空盒的一些雜論,云影,重新思考紋理,在目前的情況下,我們使用的都是D3D自己的IDirect3DTexture9紋理接口。 但是,目前的使用中,我們發(fā)現這些接口需要在各個使用紋理的類中去處理其釋放,如果以后這些類中有更多的紋理,我們就會很郁悶。,CTexture:設計,我們計劃將D3D的Texture封裝到一個名為CTexture的類中。 毫無疑問,CTexture首先應具備一個類型為LPDIRECT3DTEXTURE9的成員。 那么,針對這個成員,我們就應該起碼有創(chuàng)建、銷毀這兩個函數。 而在析構函數中,我們只需要調用一次銷毀,就可以使得使用Texture的類少一些精力為它們做掃尾的工作。,CTexture:編碼 以及對原有程序的改造,CODE 既然是使用了自己的CTexture,那么就必須同樣為Device添加設置紋理的功能,這一點應該明確。 這種加入一個類就需要改變另一個類的情況,叫做“相關”。,總結,目前用來實現天空的技術有三種:天空板,天空穹和天空盒,天空盒最常用。 天空盒總是從內部看,所以其頂點方向正好和普通立方體的頂點方向相反。 出于對紋理使用方便的考慮,我們封裝一個紋理類。在之后的實踐中,我們還將繼續(xù)擴展此紋理類,以使它實現更多的功能。,作業(yè),在上星期五代碼的基礎上。 請?zhí)砑印皵z像機” 功能,最好以類實現。(可參考上次給大家的代碼) 請自己編碼實現一個紋理類。 附加題:請使用您自己的紋理類來做一個天空盒。 本次作業(yè)請在本周五0:00之前交。 上次攝像機與公告板的作業(yè)請在本周四0:00之前交。,水面和紋理動畫,比起Real Time Rendering,本書更加深刻一些,也更加專注于BSP室內場景引擎的構建。,水面的實現方法,最早人們考慮水面,往往將其考慮為一堆三角形組成的網格,網格的規(guī)則抖動便構成了波紋。但是,這種方法可以讓場景比蝸牛還慢,因此只用作研究。,水面的實現方法,早期水面的實現方法基本上都是紋理動畫,這種方法直到今天為止還在使用。紋理動畫最簡單最基礎,對美工的要求比較高,對程序要求相當低。,水面的實現方法,Bump Env技術出現后,水面的實現方法便開始多樣起來,這些水面為場景的真實性做出了不朽的貢獻。,水面的實現方法,Shader改變了水面實現的方式,它使得人們創(chuàng)建動感的水成為了可能。 用Shader實現的水面可以完美地顯示出波動和其他特殊的效果。,紋理動畫原理,類如電影膠片,紋理動畫將循環(huán)播放一組紋理,并用這組紋理來描述動畫。 紋理動畫的用途相當廣泛,水面只是這些應用中比較出彩的一種。 紋理的例子,紋理動畫實現,平均每s毫秒順序播放一個紋理,播放完畢后重頭開始播放,以此便可實現紋理動畫。 Void Update( float fElapsed ) m_fElapsed += fElapsed; / 更新時間 if( m_fElapsed = s ) / 如果到了需要切換紋理的時間 +Texture_Index; / 切換紋理標號 if (Texture_Index = MAX_TEX_INDEX) / 如果已經播放完畢 Texture_Index = 0; / 重頭開始播放 m_fElapsed = 0.0f; / 重新計時 ,紋理動畫的實現,Void Render() / 根據當前的紋理標號進行渲染 SetTexture( m_TexturesTexture_Index ); DrawPrimitive(); ,水面的實現,紋理動畫所實現的水面一般由大量平板組成。 演示,水面的VB和IB,紋理動畫實現的水面很少有需要動態(tài)變化的,因此創(chuàng)建靜態(tài)的VB和IB以提高渲染速度成為了一個優(yōu)化的手段。,實現紋理動畫的水面,CODE,魔獸水面紋理算法,魔獸水面經過打光處理,所以我們必須添加一個光源,和一個材質。 同時,為了將光的影響和水本身的紋理因素添加到一起,由于水本身的紋理較暗,我們使用ADD算法,使得光對水面的影響更加明顯。,魔獸水面紋理的算法,最后,水紋理在Alpha通道中存的高光信息,我們將通過MODULATEALPHA_ADDCOLOR算法使之影響到場景中。 MODULATEALPHA_ADDCOLOR: Arg1的RGB + Arg2的RGB*Arg1的Alpha。 我們這里只需要為Arg1和Arg2都取Current就可以了。Enjoy!,總結,水面的實現技術包括網格化水面、紋理動畫、硬件BumpEnv和各種不同的水面Shader算法。 用紋理動畫實現水面,必須依照紋理的特性而選擇不同的紋理算法。 對于魔獸的水面,除了打光外,我們開啟了兩條紋理通道,分別使用了A

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論