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