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

正文內(nèi)容

基于opengl水波模擬_本科畢業(yè)論文-閱讀頁

2025-07-26 14:26本頁面
  

【正文】 設(shè)置 /*定 義 像 素 存 儲 格 式 */ PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), // pfd 結(jié)構(gòu)的大小 1, // 版本號 PFD_DRAW_TO_WINDOW | // 支持在窗口中繪圖 PFD_SUPPORT_OPENGL | // 支持 OpenGL PFD_TYPE_RGBA, // RGBA 顏色模式 24, // 24 位顏色深度 0, 0, 0, 0, 0, 0, // 忽略顏色位 0, // 沒有非透明度緩存 0, // 忽略移位位 0, // 無累加緩存 0, 0, 0, 0, // 忽略累加位 32, // 32 位深度緩存 0, // 無模板緩存 0, // 無輔助緩存 PFD_MAIN_PLANE, // 主層 0, // 保留 0, 0, 0 // 忽略層 , 可見性和損毀掩模 }。 if ( (pixelformat = ChoosePixelFormat(m_pDCGetSafeHdc(), amp。 return FALSE。pfd) == FALSE) { MessageBox(SetPixelFormat failed)。 } return TRUE。 wglMakeCurrent(m_pDCGetSafeHdc(), hrc)。 ③初始化的獲取 dc: m_pDC = new CClientDC(this)。 ④設(shè)置 OpenGL 視錐體即投影變換矩陣 glMatrixMode(GL_PROJECTION)。 ⑤設(shè)置視口變換: // Set the viewport 視口 to be the entire window glViewport(0, 0, w, h)。 ⑥ 設(shè)置 OpenGL 模型變換 glMatrixMode(GL_MODELVIEW)。 4.實現(xiàn)應(yīng)用程序邏輯 在本雨雪粒子系統(tǒng)中為 CMyTestView 類添加了許多成員函數(shù): InvertWaveMap()函數(shù)來編程下雨效果; DrawWave()函數(shù)用來編程雨粒子下落時的水波屬性; LnitializeOpenGL()行數(shù)用來編程初始化 openGL 場景; OnSize()函數(shù)用來添加窗口縮放時的圖形變換函數(shù);OnTime()用來添加定時器響應(yīng)函數(shù)和場景更新函數(shù); Lnit()函數(shù)用來編程雪粒子屬性。 // TODO: Add your message handler code here } 14 第三章 水波的計算機模擬原理和關(guān)鍵技術(shù) 水波很容易被認為是一種橫波,實際上并非如此。水面發(fā)生擾動時,使水面恢復(fù)水平的回復(fù)力有兩個,一個是重力,另一個是表面張力。對于波長很長很長的波,表面張力的作用可以忽略,波動主要是重力作用的結(jié)果,這種波叫做重力波。因此,水波中的每個質(zhì)點的運動都是由縱向運動和橫向運動合成的。如在 26℃ 和一個大氣壓的條件下,水的密度為 996 千克 /米 3,而空氣僅約 千克 /米 3,約為空氣的 844 倍,水每增加 一個大氣壓時僅縮小 1/20xx0,故在游泳條件下, “ 水 ” 可視為難以壓縮的流體。簡稱 NS 方程。它的矢量形式為: (31) 在直角坐標中的分量形式為: (32) (33) (34) ( 35) (36) (37) 式中 ρ 、 ν 、 p、 u、 f 分別為液體密度、運動粘性系數(shù)、動水壓強、流速矢量、單位質(zhì)量的質(zhì)量力 。 為指定點處由于時間改變而引起的速度變化率,稱為當?shù)丶铀俣龋?(u 與 ν 墷 2u 分別為作用于單位質(zhì)量液體表面的合壓力與合粘性力; (ux,uy,uz)及 (fx,fy,fz)為 u 及 f 在直角坐標中的投影。即: (38) 對于需作流場 分析的水力學(xué)問題 ,NS 方程有特別重要的意義。但 NS 方程是非線性的二階偏微分方程,僅在一些特定條件下,才能求出解析解。對高雷諾數(shù)流動,在物體表面附近的 邊界層 內(nèi),必須考慮粘性影響,按邊界層方程求解;邊界層外,粘性效應(yīng)可以忽略,用歐拉方程近似求解。大型電子計算 機的應(yīng)用 ,為 NS 方程的數(shù)值解開辟了廣闊的前景。粘滯性隨溫度升高而降低,水在 26℃ 時為空氣的 48 倍(水 =10 3牛頓 秒 /米),而在 20℃ 時約為 59 倍。 外 力越大,內(nèi)聚力被沖散越嚴重,分子間摩擦現(xiàn)象越激烈,此即物休在水中運動時構(gòu)成阻力的根源。 流動性 由于水在流體中粘滯力是較小的,故抗拉、抗壓力較弱,受剪切力和水層壓力影響時,若該力大于原有內(nèi)聚力,水即從高壓區(qū)流向低壓區(qū),或按外力方向流動。速度越快時會引起壓力重新分配,被推動向前的水量反而越少。劃動如能 持續(xù)加速即可始終保持擋水面的正壓力,起到劃靜水(相對靜止) 的作用。 描述流體運動的兩種方法之一:拉格朗日法是以研究單個流體質(zhì)點運動過程作為基礎(chǔ),綜合所有質(zhì)點的運動,構(gòu)成整個流體的運動。任何時刻任意質(zhì)點在空間的位置 (x、 y、 z)都可以看成是( a、 b、 c)和 t 的函數(shù)拉格朗日法基本特點 : 追蹤流體質(zhì)點的運動優(yōu)點 : 可直接運用固體力學(xué)中質(zhì)點動力學(xué)進行分析微 積分中的拉格朗日定理(拉格朗日中值定理)設(shè)函數(shù) f(x)滿足條件:(1)在閉區(qū)間[ a, b]上連續(xù);(2)在開區(qū)間( a, b)可導(dǎo);則至少存在一點ε∈( a, b),使得 f(b) f(a) ba f(b)=f(a) + f(ε )39。(x)在 [a,b]連續(xù) 。水波區(qū)域采樣法原理:吧睡眠堪稱一個二維的坐標系,點( x, y)坐標值將受到其周圍區(qū)域的坐標影響,最簡單的情況是假設(shè)僅僅被( x1,yx) .(x1,y).(x1,y+1). (x,y+1). (x+1,y).(x+1,y1).(x+1,y+1)和 (x,y1)影響,基于這個假設(shè)推到計算水波 振幅的公式。 水波擴散分析及解決方法 每次鼠標點擊到水面上,都會引起水波上升,或者下降,水波的能量都會被分配到一個增大的區(qū)域,這就意味著水波的振幅將會逐漸遞減,編程時使用一個阻呢系數(shù)模擬這種變化,這個系數(shù)是一個振幅的百分比參數(shù),他使高振幅的水波迅 速衰減,而使低振幅的水波緩慢衰減,根據(jù)分析,取阻呢系數(shù)為 合適。 17 第四章 基于 OpenGL 的水波模擬 系統(tǒng)設(shè)計 模擬水表面動畫的方法 大量的文獻對海洋表面仿真與動畫,無論是在計算機圖形學(xué)和 海洋學(xué)等領(lǐng)域都有討論 。 1 比如用 sin 函數(shù)來進行仿真,也就是運用了水波 的特性; 2 用傅立葉和里維斯變換描寫水波在計算機圖形學(xué)里的實現(xiàn), 這種方法伸縮性很好,不僅可用于以高品質(zhì)的水動畫錄像資料而且也可以用于實時性的仿真; 3 當然也用運用物理模型的方法,這種方法運用了一些理想狀態(tài),然后用圖形學(xué)的方法把它表示出來,典型的就是運用著名的流體方程 NavierStokes 方程,這個復(fù)雜的數(shù)學(xué)程序的有益之處是轉(zhuǎn)換高程和速度勢成為一個比較簡單動力學(xué); 4 就是運用粒子系統(tǒng),這種方法的思路是將流體看作粒子集;以上四種方法是前人用的最多的,對于第一種,這種方法比較簡單而且也給出了實際的數(shù) 學(xué)模型,該模型對于硬件要求 比較低,模擬出來的結(jié)果也可以達到一般的要求;第二種方法可以模擬出很好的海面效果,但是這種方法對硬件的配置要求比較高,尤其是 GPU;第三種方法運用了著名的流體方程,但是轉(zhuǎn)化的情況其實是只是簡單的海洋高度場,包括上升時候的色散關(guān)系;第四種方法可以模擬浪花飛濺但是不能模擬水波 。 水波模擬的算法設(shè)計 要對某種自然現(xiàn)象進行模擬仿真,就必須對該現(xiàn)象的特性有很好的認識。這些關(guān)于波的特性屬于普通物理的研究范疇,因為在模擬時需要的是實時的渲染,而每秒種至少要渲染 15幀以上才能使水波得以平滑的顯示??梢杂脙蓚€與水池圖象一樣大小的數(shù)組 buf1和 buf2來保存水面上每一個點(離散化的點,對應(yīng)于每一個像素)的前、后兩時刻的波幅數(shù)據(jù)。當有外力干擾,如向水池投一顆石子會使水面泛起層層的漣漪。而且水波上的任何一點在任何時候都是通過振幅的變化把能量以自己為圓心向四周擴散,我們可以近似認為一個點只會對相臨的前、后、 左、右四個點有影響。假設(shè)表示該影響關(guān)系的公式為: A0’=a ( A1+A2+A3+A4) +bA0 (41) 其中 a、 b為待定系數(shù), A0’ 為 0點下一時刻的振幅, A0、 A A A A4均為為當前時刻的周圍各點振幅。而且除 2可以用運算速度很快的移位運算符 來進行。但水在實際中是存在阻尼的,水波會在擴散過程中逐漸衰減直至消失。到此為止,已將水波的擴散和衰減等特型用數(shù)學(xué)模型表示了出來,下面是具體計算波幅數(shù)據(jù)的主要代碼: void Spread() { ?? for (int i=BACKWIDTH。 //能量的衰減 buf2[i] = buf2[i]5。 buf1 = buf2。 ?? } 雖然模擬了對波的傳播過程,但如不考慮水面起伏的水波引起的對光的折射也是不逼真的,也正是由于水面上部的光線反射,才使我們感覺到水波的起伏 。偏移的程度同 19 水波的斜率,水的折射率和水的深度都有關(guān)系,出于對處理速度的考慮同樣也不能對其進行精確的模擬。因為水面越傾斜,所看到的水下景物偏移量就越大,所以,我們可以近似的用水面上某點的前后、左右兩點的波幅之差來代表所看到水底景物的偏移量: void Render() { ?? int xoff, yoff。 for (int i=1。 j { //計算偏移量 xoff = buf1[k1]buf1[k+1]。 //判斷坐標是否在窗口范圍內(nèi) if ((i+yoff ) 0 ) {k++。} if ((i+yoff )BACKHEIGHT) {k++。} if ((j+xoff ) 0 ) {k++。} if ((j+xoff )BACKWIDTH ) {k++。} //計算出偏移象素和原始象素的內(nèi)存地址偏移量 int pos1, pos2。 pos2=*i+ depth*j。 d 20 Bitmap2[pos2++]=Bitmap1[pos1++]。 } } } 在無外力影響的情況下,是不會自發(fā)產(chǎn)生水波的,必須對水面施加某種激勵才能引起波源的擴散??梢栽谟挈c落水的地點來一個負的 尖脈沖 ,即讓 buf[x,y]=n。受力半徑的控制也好辦,只須以入水中心點為圓心,畫一個以雨點半徑為半徑的圓,讓這個圓里所有的點都來這么一個負的 尖脈沖 就可以了,顯然這里也是做的近似處理: void DropStone(int x,/*x 坐標 */ int y,/*y 坐標 */int stonesize,/*半徑 */int stoneweight/*能量 */) { ?? //判斷坐標是否在屏幕范圍內(nèi) if ((x+stonesize)BACKWIDTH || (y+stonesize)BACKHEIGHT||(xstonesize)0||(ystonesize)0) return。 posx for (int posy=ystonesize。 ?? } 雖然在前面的推導(dǎo)中多處采用了看似過分的非常近似的處理,但是完全不必擔心,事實證明,用這種方法,在速度和圖象上都可以獲得非常好的效果。 21 這種用數(shù)據(jù)緩沖區(qū)對圖象進行處理的方法的最大的好處就是:程序運算和顯示的速度與水波的復(fù)雜程度是無關(guān)的,用類似的方法完全可以對其他一些物理、自然現(xiàn)象如煙霧、云彩、陽光等進行逼真的模
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1