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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論