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

正文內(nèi)容

基于opengl粒子系統(tǒng)的噴泉模擬(參考版)

2024-11-11 17:47本頁(yè)面
  

【正文】 最后衷心感謝各位評(píng)審老師。 然后我感謝大 學(xué)四年來(lái)所有的老師,他們?yōu)槲覀兇蛳铝松詈竦挠?jì)算機(jī)專業(yè)知識(shí)基礎(chǔ)。沒(méi)有老師的幫助和指導(dǎo)是不可能完成這項(xiàng)設(shè)計(jì)任務(wù) , 在此向 申 老師致以最衷心的感謝。 湖南大學(xué)畢業(yè)設(shè)計(jì) (論文 ) 第 27 頁(yè) 湖南大學(xué)軟件學(xué)院 致謝 在對(duì)本系統(tǒng)的整個(gè)開發(fā)過(guò)程中,得到了指導(dǎo)老師的幫助。水滴的材質(zhì)和光照屬性都只是依靠紋理貼圖略微的體現(xiàn),視覺(jué)效果稍差。 不過(guò),系統(tǒng)對(duì)水滴的模擬并沒(méi)有做到位,只是簡(jiǎn)單地對(duì)正方體粒子使用紋理貼圖的方式進(jìn)行模擬。 系統(tǒng) 在提高粒子處理規(guī)模的同時(shí),提高了繪制的效率,從而保證了繪制的實(shí)時(shí)。 } 湖南大學(xué)畢業(yè)設(shè)計(jì) (論文 ) 第 26 頁(yè) 湖南大學(xué)軟件學(xué)院 5. 總結(jié) 本系統(tǒng) 采 粒子系統(tǒng)來(lái)模擬噴泉,利用 MFC 框架實(shí)現(xiàn)場(chǎng)景模擬。 ::SwapBuffers(m_pDCGetSafeHdc())。 // 繪制噴泉 DrawFountain()。 glEnd()。 glTexCoord2f(0, 2)。 glTexCoord2f(2, 2)。 glTexCoord2f(2, 0)。 glTexCoord2f(0, 0)。 glRotatef(a, 0, 1, 0)。 gluLookAt(, , , 0, 0, 0, , , )。 glBindTexture(GL_TEXTURE_2D, texture1)。 如圖 7: 圖 42 噴泉的模擬效果 圖 具體實(shí)現(xiàn) 代碼如下: BOOL CMyFountainView::RenderScene() { glClear(GL_COLOR_BUFFER_BIT)。 glVertex3f(100, 0, 100) glBindTexture(GL_TEXTURE_2D, texture)。 glVertex3f(100, 0, 100)。 glVertex3f(100, 0, 100)。 glVertex3f(100, 0, 100)。因此 ,本文 繪制了一個(gè)簡(jiǎn)單的地面進(jìn)行場(chǎng)景的實(shí)現(xiàn)。 } glPopMatrix()。 tempp = temppnext。 glTexCoord2f(0, 1)。 glTexCoord2f(1, 1)。 glTexCoord2f(1, 0)。 // 繪制多邊形和粒子紋理映射 glTexCoord2f(0, 0)。 *= 5。 *= 5。 normalize(amp。upv, amp。 vect_mult(amp。 = temppy 。 湖南大學(xué)畢業(yè)設(shè)計(jì) (論文 ) 第 23 頁(yè) 湖南大學(xué)軟件學(xué)院 ttz = temppx*sin(alpha)+temppz*cos(alpha)。 while (tempp) { // 旋轉(zhuǎn)噴泉 alpha = ((j*120+a)*PI)/180。 j++) { glBegin(GL_QUADS)。 for (j=0。 DeleteParticles()。 AddParticles()。 float alpha, ttx, ttz。 struct particle *tempp。 glVertex3f((), (temppy+), ())。 glVertex3f((ttx+), (temppy+), (ttz+))。 glVertex3f((ttx+), (tempp), (ttz+))。 glVertex3f((), (tempp), ())。 ( 4) 啟動(dòng)紋理映射 glEnable(GL_TEXTURE_2D)。 glVertex3f((), (temppy+), ())。 glVertex3f((ttx+), (temppy+), (ttz+))。 glVertex3f((ttx+), (tempp), (ttz+))。 glVertex3f((), (tempp), ())。 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)。 ( 1) 定義紋理 glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, texwid, texht, 0, GL_RGBA, GL_UNSIGNED_BYTE, teximage)。紋理映射的關(guān)鍵是定義紋理、指定紋理在像素上的應(yīng)用方式及啟用紋理。 由于本文采用的 粒子是一個(gè)個(gè) 很 小的正方體 , 所以 可以 不用設(shè)置三維結(jié)構(gòu)圖,這樣就減 輕 了工作量。 *= 5 其中 ,“ alpha = ((j*20+a)*PI)/180” 中的 20 表示 18 個(gè)水柱以間隔 20 度分布在一個(gè)圓面。 *= 5。 normalize(amp。upv, amp。 湖南大學(xué)畢業(yè)設(shè)計(jì) (論文 ) 第 21 頁(yè) 湖南大學(xué)軟件學(xué)院 vect_mult(amp。 = temppy 。 ttz = temppx*sin(alpha)+temppz*cos(alpha)。 具體實(shí)現(xiàn) 代碼 如下: alpha = ((j*20+a)*PI)/180。噴泉可以看做是以噴射點(diǎn)為圓心向周圍 360 度方向上噴射的無(wú)數(shù)個(gè)水柱組成 。水柱的變化形成各種各樣的噴泉。即AddParticles()MoveParticles()DeleteParticles()的循環(huán) 。 } } 水柱生成 湖南大學(xué)畢業(yè)設(shè)計(jì) (論文 ) 第 20 頁(yè) 湖南大學(xué)軟件學(xué)院 水柱的生成 實(shí)際上 就是 許多 粒子不斷活動(dòng)的結(jié)果。 tempp = temp1。 if (temppnext) temppnextprev = temp1。 (temppa = 0)) // 粒子死亡 { // 刪除粒子 temp1 = temppprev。 while (tempp) { if ((tempptype == 1) amp。 j3。 int j。 這 便 是 本文所采用的利用 粒子的淡化處理 方式 進(jìn)行粒子的刪除操作。 在粒子的活動(dòng)中 , 設(shè)定當(dāng) y(即粒子的高度) 0 時(shí) type=0,粒子 在地面上空, 同時(shí)設(shè)定 a=1。 // 下一個(gè)粒子 } } } 粒 子刪除 的實(shí)現(xiàn): 粒子的屬性中有個(gè) type,表示粒子所處的狀態(tài) 。 temppa = 。 // 增加粒子壽命 if (temppy 0) tempptype = 1。 // 計(jì)算粒子的高度 H = gt^2/2 temppy = (*(temppt*temppt/4))/2+。 while (tempp) { if (tempptype == 0) // 如果粒子處于運(yùn)動(dòng)狀態(tài) { temppx += temppxd。 j3。 int j。粒子通過(guò)坐標(biāo)的不斷變化進(jìn)行活動(dòng),這樣就可以形成一個(gè)水柱。 由于粒子只受到重力作用, x、 z方向上并不受力,所以粒子 x、 z方向通過(guò)自己方向上速度的不斷自加來(lái)計(jì)算其在 x、 z 軸上的坐標(biāo)。 Tempz+=temppzd。 // 粒子淡化 } } 其中 最后一步的“ a=1”,其含義 將會(huì)在粒子活動(dòng)中介紹。 tempptype = 0。 temppxd = cos((temppd*)/180)*temppv/4。 temppy = 0。 // 粒子速度 temppd = (float)(rand() % 400)/1002。 湖南大學(xué)畢業(yè)設(shè)計(jì) (論文 ) 第 17 頁(yè) 湖南大學(xué)軟件學(xué)院 temppt = 。 temppnext = fn[j]。 i++) { tempp = (struct particle *)malloc(sizeof(struct particle))。 j++) for (i=0。 for (j=0。 運(yùn)動(dòng)方向: d=( rand()%400) /1002 代碼如下: void CMyFountainView::AddParticles() { struct particle *tempp。 當(dāng)一個(gè)粒子產(chǎn)生時(shí) ,需要 給它的屬性定義初始值 (此操作定義為 AddParticles) ,其值為: 當(dāng)前狀態(tài): type=0;( 0 表示粒子狀態(tài)為運(yùn)動(dòng), 1 表示粒子處于靜止) 當(dāng)前位置: x=0,y=0,z=0。 首先對(duì)每個(gè)粒子給予一些屬性,粒子根據(jù)它屬性的變化進(jìn)行活動(dòng)。本系統(tǒng)是在 VC2020 中實(shí)現(xiàn)的,利用 OpenGL,運(yùn)用了 MFC 框架 。 湖南大學(xué)畢業(yè)設(shè)計(jì) (論文 ) 第 16 頁(yè) 湖南大學(xué)軟件學(xué)院 4. 系統(tǒng)實(shí)現(xiàn) 在本 章 內(nèi)容中,將羅列系統(tǒng)中實(shí)現(xiàn)的部分功能 ,并 附上一些核心代碼 。在這里 本文 應(yīng)用了二維紋理,使用 BillBoarding 和 alpha 通道技術(shù),使得噴泉燃放模型在實(shí)際應(yīng)用中能滿足實(shí)時(shí)性要求并且更加逼真。其中還要用到 Alpha 融合技術(shù),使平面本身不可見,僅讓有用的部分圖象顯示出來(lái)。如果是二維紋理還需要結(jié)合 BillBoarding 技術(shù)( Billboard 是讓二維或者面元經(jīng)過(guò)旋轉(zhuǎn)后總是朝向觀察者的一種技術(shù)。對(duì)于噴泉?jiǎng)討B(tài)模擬,就會(huì)顯的更加真實(shí)。其紋理包含 alpha 通道( alpha channel),還加入偽粒子的特征。而對(duì)于要求限時(shí)計(jì)算的場(chǎng)景,需要改進(jìn)傳統(tǒng)的粒子系統(tǒng)方法,盡可能地降低渲染這些粒子的代價(jià),提高系統(tǒng)的實(shí)時(shí)性。噴泉的模擬按圖 34 所示的步驟進(jìn)行: 圖 34 噴泉粒子處理流程圖 紋理映射技術(shù) 在虛擬環(huán)境的繪制中,如果能夠成功的實(shí)時(shí)模擬各類自然現(xiàn)象,場(chǎng)景將會(huì)變得十分逼真和生動(dòng)。 實(shí)驗(yàn)證明 Line 方式模擬的效果更加逼真。考慮到粒子 系統(tǒng)水花四濺的特征,在繪制粒子的時(shí)候, 本文 采用 了 Line 方式,而不是采用傳統(tǒng)的 Point 方式。平面由平面上的特征點(diǎn) O 和法線方向 N 確定,在 上述 例子中,特征點(diǎn)設(shè)置為 P2 點(diǎn),法線方向設(shè)置為 Y 軸正方向??梢詮?qiáng)制消除系統(tǒng)中處于錯(cuò)誤運(yùn)動(dòng)軌跡的粒子,也就是不再有生存需要的粒子。在系統(tǒng)中,任何粒子的速度矢量 V 都被分解為兩個(gè)方向的速度分量 Vn 和 Vt,其中 Vn 是粒子反彈面 σ 的法線方向上的分量,另外一個(gè)分量 Vt 與 σ 相切,圖 33 所示為粒子反彈 運(yùn)動(dòng)的 示意: 圖 33 粒子反彈運(yùn)動(dòng)示意圖 經(jīng)過(guò)反彈之后, Vn 被反向,同時(shí)大小乘以反彈系數(shù) ε,得到 Vn’和 Vt’合成就得到了粒子在經(jīng)過(guò)反彈面作用后的速度 V’,如 公式 ( 35) : Vn=(V為了有合適的下落速度,以取得良好的 動(dòng)畫效果,經(jīng)過(guò)多次實(shí)驗(yàn)之后針對(duì)當(dāng)前的初始速度把加速度的值設(shè)置為 ,而非重力加速度為 。 噴泉粒子的運(yùn)動(dòng)軌跡 為了設(shè)定粒子的行為模型,首先要確定粒子受力的物理模型 。現(xiàn)在就可以產(chǎn)生新粒了,將粒子產(chǎn)生的位置( x0, y0, z0)范圍限制在 Z軸上一條很短的直線段上,這樣可以使粒子產(chǎn)生的位置看起來(lái)就像 從一個(gè)很細(xì)的管嘴噴出來(lái)一樣。將粒子的初始速度( Vx,Vy,Vz)限制在一個(gè)圓柱環(huán)的域內(nèi),圓柱的軸平行與 Y 軸并且長(zhǎng)度很短,圓柱的外徑和內(nèi)徑也都不大,這樣可以保證粒子以比較穩(wěn)定的狀態(tài)變化。在這個(gè)例子中, σ1與 Y 軸交于原點(diǎn) O, σ2與 Y 軸交于 P1 點(diǎn), σ0與 Y 軸交于 P2 點(diǎn)。 圖 32 描述了這個(gè)噴泉的大致形狀,其 中虛線段表示的 σ1和 σ2平面為噴泉的反射面,他們的形狀和位置可以由用戶設(shè)置。 噴泉種類多樣, 本文 挑選出其中一些具有代表性的進(jìn)行研究和模擬。 噴泉模擬 的算法 想要有好的模擬效果,首先要構(gòu)造合適的坐標(biāo)系。對(duì)于無(wú)能量損失的湖南大學(xué)畢業(yè)設(shè)計(jì) (論文 )
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1