freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于粒子系統(tǒng)噴泉實現(xiàn)論文-資料下載頁

2024-11-07 16:50本頁面

【導讀】虛擬場景中,自然景物的模擬一直是計算機圖形學領域中研究的內(nèi)容。分復雜困難,具有一定的挑戰(zhàn)性。同時也是對計算機圖形學有更進一步的認識和了解。用粒子系統(tǒng)建模的方法。本論文采用后一種方法對噴泉的三維效果進行研究。語言和MFC編程框架來模擬噴泉的情況,實現(xiàn)三維空間中物體運動變換模擬分析。該噴泉系統(tǒng)的實現(xiàn)一方面是基于粒子系統(tǒng)的介紹過程,通過不同角度。來觀察噴泉,展現(xiàn)出不同的景觀。意義和使用意義。本文以OpenGL三維圖形函數(shù)庫為繪圖工具,詳細討論了模型中粒子的屬性及。該方式模擬噴泉比較真實,速度快,在普通的微機上可以得到令

  

【正文】 truct particle))。 if (fn[j]) fn[j]prev = tempp。 temppnext = fn[j]。 fn[j] = tempp。 temppt = 。 temppv = (float)(rand() % 202000)/100000+1。 // 粒子速度 temppd = (float)(rand() % 400)/1002。 // 粒子方向 // 開始位置的坐標 temppx = 0。 temppy = 0。 temppz = 0。 temppxd = cos((temppd*)/180)*temppv/4。 temppzd = sin((temppd*)/180)*temppv。 tempptype = 0。 // 粒子狀態(tài)為運動 temppa = 1。 // 粒子淡化 } } 其中最后一步的 “ a=1” ,其含義將會在粒子活動中介紹。 粒子的運動 粒子的活動主要有 2 個 —— 粒子的移動( MoveParticles)和粒子的刪除( DeleteParticles) (1) 粒子移動的 設計與 實現(xiàn) 噴泉的設計與實現(xiàn) 21 首先需要定義了一個指針 *tempp,通過下面的方式來計算粒子下個位置的坐標,以此來實現(xiàn)粒子的移動: Tempx+=temppxd。 Tempz+=temppzd。 Tempy+=(*(temppt* temppt/4))/2+。 由于粒子只受到重力作用, x、 z 方向上并不受力,所以粒子 x、 z 方向通過自己方向上速度 的不斷自加來計算其在 x、 z 軸上的坐標。而在 y 方向上,粒子受到重力的作用,通過物理學公式 s=g*t2/2,可以定義 y+=(*(temppt* temppt/4))/2+,其中 是給定的初始高度。粒子通過坐標的不斷變化進行活動,這樣就可以形成一個水柱。 代碼如下: void CMyFountainView::MoveParticles() { struct particle *tempp。 int j。 for (j=0。 j3。 j++) { tempp = fn[j]。 while (tempp) { if (tempptype == 0) // 如果粒子處于運動狀態(tài) { temppx += temppxd。 temppz += temppzd。 // 計算粒子的高度 H = gt2/2 temppy = (*(temppt*temppt/4))/2+。 temppt += 。 // 增加粒 子壽命 if (temppy 0) tempptype = 1。 }else // 粒子位于地面 { temppy = (*(temppt*temppt/4))/2+。 噴泉的設計與實現(xiàn) 22 temppa = 。 // 粒子淡化 } tempp = temppnext。 // 下一個粒子 } } } ( 2)粒子刪除的 設計與 實現(xiàn) 粒子的屬性中有個 type,表示粒子所處的狀態(tài)。當 type=0 時表示粒子 在地面上空即粒子處于運動狀態(tài),當 type=1 是表示粒子位于地面即粒子處于靜止。 在粒子的活動中,設定當 y(即粒子的高度) 0 時 type=0,粒子在地面上空,同時設定 a=1。當粒子位于地面下時, y0,設置 type=1,同時對 a 進行自減操作 a=,當 a=0 是粒子消失。 這便是本文所采用的利用粒子的淡化處理方式進行粒子的刪除操作。 代碼如下: //刪除粒子 void CMyFountainView::DeleteParticles() { struct particle *tempp, *temp1。 int j。 for (j=0。 j3。 j++) { tempp = fn[j]。 while (tempp) { if ((tempptype == 1) amp。amp。 (temppa = 0)) // 粒子死亡 { // 刪除粒子 temp1 = temppprev。 temppprevnext = temppnext。 if (temppnext) temppnextprev = temp1。 free(tempp)。 噴泉的設計與實現(xiàn) 23 tempp = temp1。 } tempp = temppnext。 } } 粒子的消亡 粒子不能無限制的運動下去,那樣系統(tǒng)中將不會有新粒子產(chǎn)生??梢詮娭葡到y(tǒng)中處于錯誤運動軌跡的粒子,也就是不再有生存需要的粒子。 設置一個與 Y 軸正交的平面域,使運動到該平面下方的粒子全部消亡。平面由平面上的特征點 O 和法線方向 N 確定,在上述例子中,特征點設置為 P2 點,法線方向設置為 Y 軸正方向。 噴泉模擬算法 想要有好的模擬效果,首先要構造合適的坐標系。假想觀察者的視點位于屏幕正前方,以噴泉出水的管嘴的中心位置為 O,設置 X 軸正向沿從左至右的 方向, Y 軸正向沿從下至上的方向, Z 軸正向為從里至外的方向。 噴泉種類多樣,本文挑選出其中一些具有代表性的進行研究和模擬。下面以這樣的一個噴泉為例來說明模擬方法:這個噴泉是從以原點 O 為中心的管嘴中噴出水柱,經(jīng)過兩次面反射之后落在水池之中。 圖 42 描述了這個噴泉的大致形狀,其中虛線段表示的 σ1 和 σ2 平面為噴泉的反射面,他們的形狀和位置可以由用戶設置。目前反彈面的形狀可以設為矩形或者圓;粗實線表示噴泉水流的輪廓;最下方用實線表示的 σ0 平面為水池表面。在 圖 中, σ1與 Y 軸交于原點 O, σ2與 Y 軸交于 P1 點, σ0與 Y 軸 交于 P2 點。 圖 42 噴泉形狀圖示 噴泉的設計與實現(xiàn) 24 噴泉粒子初始化 首先設定粒子的初始屬性,包括粒子的初始速度、初始位置以及顏色。將粒子的初始速度( Vx,Vy,Vz)限制在一個圓柱環(huán)的域內(nèi),圓柱的軸平行與 Y 軸并且長度很短,圓柱的外徑和內(nèi)徑也都不大,這樣可以保證粒子以比較穩(wěn)定的狀態(tài)變化。 然后設定粒子的初始顏色,由于是模擬噴泉水流,設定粒子顏色為白色。現(xiàn)在就可以產(chǎn)生新粒了,將粒子產(chǎn)生的位置( x0, y0, z0)范圍限制在 Z 軸上一條很短的直線段上,這樣可以使粒子產(chǎn)生的位置看起來就像從一個很細的管嘴噴出來一樣 。粒子的位置將按照下面 ( 公式 41) 所示 變化: x=x0+∫Vxdt y=y0+∫Vydt ( 公式 41) z=z0+∫Vzdt 其中,( x, y, z)是粒子的位置,( x0, y0, z0)是粒子的初始位置,( Vx, Vy, Vz)是粒子的速度。 噴泉粒子的運動軌跡 為了設定粒子的行為模型,首先要確定粒子受力的物理模型。粒子一直受重力作用,因為設定粒子在生 命周期內(nèi)一直受 Y 軸負方向的力作用,也就是給粒子一個沿重力作用方向的加速度。為了有合適的下落速度,以取得良好的動畫效果,經(jīng)過多次實驗之后針對當前的初始速度把加速度的值設置為 ,而非重力加速度為 。 與無能量損失的反彈運動不同,在該模型中有兩個重要參數(shù),摩擦系數(shù) μ 和反彈系數(shù) ε。在系統(tǒng)中,任何粒子的速度矢量 V都被分解為兩個方向的速度分量 Vn 和 Vt,其中 Vn 是粒子反彈面 σ的法線方向上的分量,另外一個分量 Vt 與 σ相切,圖 43 所示為粒子反彈運動的示意: 圖 43 粒子反彈運動示意圖 經(jīng)過反彈之后, Vn 被 反向,同時大小乘以反彈系數(shù) ε,得到 Vn’和 Vt’合成就得到噴泉的設計與實現(xiàn) 25 了粒子在經(jīng)過反彈面作用后的速度 V’,如 ( 公式 42) 所示 : Vn=(VN)*N Vt=VVn ( 公式 42) V’=(1μ)VtεVn 噴泉繪制 粒子系統(tǒng)的產(chǎn)生、運動和消亡都確定之后,就可以進行噴泉的繪制工作了??紤]到粒子系統(tǒng)水花四濺的特征,在繪制粒子的時候, 本文采用了 Line 方式,而不是采用傳統(tǒng)的 Point 方式。 Line 方式就是將粒子的原始位置和根據(jù)粒子速度計算出來的粒子下一個時刻位置用直線連接,這樣可以模擬出水粒子模糊的效果。實驗證明 Line 方式模擬的效果更加逼真。以下為其實現(xiàn)方式: 噴泉由多個水柱組成,每個水柱可看成由很多個小水珠組成,每個小水珠可由一個粒子來模擬,本文稱之為噴泉粒子。噴泉的模擬按圖 44 所示的步驟進行: 圖 44 噴泉粒子處理流程圖 代碼詳見附錄 (6)。 系統(tǒng) 實現(xiàn) 水柱生成 水柱的生成實際上就是許多粒子不斷活動的結果。具體的實現(xiàn)就是對粒子進行增加、移動、刪除的操作,不斷的循環(huán)這樣的操作就可以實現(xiàn)水柱的生成了。即產(chǎn)生新的噴泉粒子并初始化屬性 繪制噴泉粒子 更新噴泉粒子的速度 繪制噴泉粒子 Texture 數(shù)據(jù)轉(zhuǎn)為頂點數(shù)據(jù) 更新噴泉粒子的位置和其他屬性 噴泉的設計與實現(xiàn) 26 AddParticles()MoveParticles()DeleteParticles()的循環(huán) 。 噴泉旋轉(zhuǎn) 正如大家平時所看到一樣,噴泉是由一個個水柱組成的。水柱的變化形成各種各樣的噴泉。本文在實現(xiàn)時,定義了一個數(shù)組 fn[j],其中 j 表示第 j 個的水柱。噴泉可以看做是以噴射點為圓心向周圍 360 度方向上噴射的無數(shù)個水柱組成。按照 這個思想,只要將水柱進行 360 度的旋轉(zhuǎn),噴泉就可以模擬出來了。 具體實現(xiàn)代碼如下: alpha = ((j*20+a)*PI)/180。 ttx = temppx*cos(alpha)temppz*sin(alpha)。 ttz = temppx*sin(alpha)+temppz*cos(alpha)。 = ttx 。 = temppy 。 = ttz 。 vect_mult(amp。vectd, amp。upv, amp。vectl)。 normalize(amp。vectl)。 *= 5。 *= 5。 *= 5 其中, “ alpha = ((j*20+a)*PI)/180” 中的 20 表示 18 個水柱以間隔 20 度分布在一個圓面。 紋理貼圖 紋理貼圖是一個比較煩瑣的過程,它首先需要添加相應的映射函數(shù)、設置像素格式和管理著色描述表。由于本文采用的粒子是一個個很小的正方體,所以可以不用設置三維結構圖,這樣就減輕了工作量。 當以上步驟都完成后,就可以進行紋理貼圖的主要環(huán)節(jié) 了 —— 紋理映射。紋理映射的關鍵是定義紋理、指定紋理在像素上的應用方式及啟用紋理。 在本文的具體實現(xiàn)時,采用如下方式定義紋理控制濾波,說明紋理的映射方式,啟用紋理。 噴泉的設計與實現(xiàn) 27 (1) 定義紋理 glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, texwid, texht, 0, GL_RGBA, GL_UNSIGNED_BYTE, teximage)。 (2) 控制紋理 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)。 glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_NEAREST)。 glTexCoord2f(0, 0)。 glVertex3f((), (tempp), ())。 glTexCoord2f(1, 0)。 glVertex3f((ttx+), (tempp), (ttz+))。 glTexCoord2f(1, 1)。 glVertex3f((ttx+), (temppy+), (ttz+))。 glTexCoord2f(0, 1)。 glVertex3f((), (temppy+), ())。 (3) 說明紋理映射方式 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE)。 (4) 啟動紋理映射 glEnable(GL_TEXTURE_2D)。 (5) 完成紋理貼圖 glTexCoord2f(0, 0)。 glVertex3f((), (tempp), ())。 glTexCoord2f(1, 0)。 glVerte
點擊復制文檔內(nèi)容
試題試卷相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1