摘要: 本例程實現(xiàn)了一個焰火例子系統(tǒng),運行效果如圖14.3所示:
閱讀全文
摘要: 現(xiàn)在讓我們用cParticleSystem類開始一個具體的粒子系統(tǒng),為了說明用意,這些系統(tǒng)的設(shè)計很簡單,沒有用到cParticleSystem類所提供的所有靈活性。我們實現(xiàn)雪、火、粒子槍系統(tǒng)。雪系統(tǒng)模擬下落的雪花,火系統(tǒng)模擬看上去像火焰的爆炸,粒子槍系統(tǒng)從照相機位置向?qū)γ姘l(fā)射出粒子(用鍵盤)。
閱讀全文
摘要: 因為粒子系統(tǒng)是動態(tài)的,在每一個幀中我們需要更新系統(tǒng)中的粒子,對于渲染粒子系統(tǒng)的一種直觀但效率低下的方法如下:
創(chuàng)建一個足夠大的頂點緩存保存最大數(shù)量的粒子。
每一幀里執(zhí)行:
A. 更新所有粒子。
B. COPY所有活著的粒子到頂點緩存。
C. 繪制頂點緩存。
這個方法正確,不過不是最有效率的。
閱讀全文
摘要: 粒子系統(tǒng)是粒子的集合,用來保存和顯示這些粒子。粒子系統(tǒng)維護所有粒子的全部屬性,影響系統(tǒng)中的所有粒子:粒子的尺寸,起始的位置及應(yīng)用在粒子上的紋理等。粒子系統(tǒng)的方法負責(zé)更新、顯示、殺死和創(chuàng)建粒子。
雖然不同的具體(與抽象是相對的)粒子系統(tǒng)有不同的行為,我們歸納并找到一些所有的粒子系統(tǒng)共有的基本屬性,我們把這些公共的屬性放到一個抽象的cParticleSystem基類,它是我們所有的具體粒子系統(tǒng)的父類,現(xiàn)在讓我們看一下cParticleSystem類:
閱讀全文
摘要: 許多自然現(xiàn)象是由很多小的小顆粒組成的,它們有相似的行為。(例如,雪花落下,閃爍的火焰,沖出槍管的“子彈”),粒子系統(tǒng)用來模擬這種現(xiàn)象。
粒子是一個很小的對象,它通常用來模擬數(shù)學(xué)中的一個點。點元是用來顯示粒子的很好的方案,可是點元被光柵化成一個簡單的像素。這沒給我們多少靈活性,因為我們想有各種大小不同的粒子,并且把整個紋理平滑映射到這些粒子上。在Direct3D 8.0以前,因為點元方法的局限性而完全不使用他們。代替的方法是程序員將使用公告板去顯示粒子,一個板是一個方格,世界矩陣用它來確定方向,使它總是朝向照相機。
閱讀全文
摘要: 實際上,地形網(wǎng)格不比三角形網(wǎng)格復(fù)雜,圖13.1.(a)所示,網(wǎng)絡(luò)的每個頂點指定了高度,格子模型用這種方式顯示從山脈到河流的平滑過渡。圖13.1 (b),模擬自然地形。當然,我們可以用漂亮的紋理表現(xiàn)沙石地,綠色的山丘。圖13.1.(c)雪山效果。
閱讀全文
摘要: 該例子是用一個包含高度信息的RAW文件創(chuàng)建一個地形,紋理和光源。用方向鍵在地形上行走。
閱讀全文
摘要: 構(gòu)造了一個地形以后,我們想要有移動攝像機的能力,以便模擬在地形上行走的效果。我們需要調(diào)整攝像機的高度,這依賴于地形部分的知識,好的,繼續(xù)往下看。我們首先需要找到照相機所在的方格的位置,并給出x軸和z軸坐標,cTerrain::get_height函數(shù)能做到這些,它能提供x軸、z軸坐標參數(shù),返回攝像機需要被設(shè)置在地形上的高度值,現(xiàn)在看實現(xiàn)部分。
閱讀全文
摘要: cTerrain::generate_texture方法會調(diào)用cTerrain::light_terrain,顧名思義,光照使地形更接近于現(xiàn)實。當我們已經(jīng)計算完地形紋理以后,我們只需要計算陰影系數(shù)(shade factor),使一個定義了光源的地形區(qū)域變亮或變暗。你會驚訝于為什么我們照亮地圖卻沒有讓Direct3D來做。我們自己來計算有三個好處:
閱讀全文