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