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

正文內(nèi)容

基于opengl的飛機虛擬場景漫游模擬畢業(yè)論文-文庫吧

2024-10-19 00:54 本頁面


【正文】 局變量,全局變量調(diào)用構造函數(shù),然后才進入 WinMain 函數(shù)。 ( 2) 將 OpenGL 所需的頭文件放在 Visual C++ 安裝目錄下的 VC98 文件夾下的 GL目錄中,并將 、 、 、 OpenGL32dll 這些動態(tài)鏈接庫文件放入 Windows 系統(tǒng)的 system32 文件夾目錄下。 ( 3) 在 Stdfax(預編譯頭文件)里添加 OpenGL 的頭文件: include gl/、 include gl/、 include gl/ ,并添加自定義連接庫: pragma ment( lib, ) 、 pragma ment( lib, ) 、 pragma ment( lib, )、 pragma ment( lib, )。 ( 4) 對于程序框架來說,視圖類 planeView 是用于展現(xiàn)輸出的直接載體 , 因此以下修改都是 針 對這個類進行的。首先修改的是 planeView 類里的 OnCreate()函數(shù) ,在OnCreate()函數(shù)里創(chuàng)建一個 InitializeOpenGL()函數(shù),在此函數(shù)里 創(chuàng)建一個渲染上下文文件。 int CPlaneView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == 1) return 1。 ?? //建立渲染上下文 m_hRC = ::wglCreateContext(m_pDCGetSafeHdc())。 ?? return 0。 } ( 5) 修改 CPlaneView 類里的 OnSize()函數(shù), OnSize()函數(shù)主要作用是當窗口大小改變時,如放大、縮小窗口,會相應地改變投影方式和視口大小,使場景里的物體正確地顯示在窗口中。 相關代碼如下: void CPlaneView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy)。 if (cy==0) { cy=1。 } 福州大學陽光學院本科生畢業(yè)設計(論文) 4 glViewport(0,0,cx,cy)。//添加窗口縮放時的圖形變換函數(shù) ?? . } ( 6) 修改 CPlaneView 類里的 OnDestroy 函數(shù), OnSize()函數(shù)主要作用是 當窗口將被銷毀時 ,刪除 RC。 void CPlaneView::OnDestroy() { CView::OnDestroy()。 ?? ::wglDeleteContext( m_hRC)。 if (m_hPalette) DeleteObject(m_hPalette)。 if ( m_pDC ) { delete m_pDC。 } ?? } 基于 OpenGL 的飛機虛擬場景漫游模擬 5 3 課題實現(xiàn)的關鍵技術 場景建模 場景建模能夠直接展示出場景的三維特征,也是影響著三維可視化系統(tǒng)功能的實現(xiàn)的關鍵。 在本系統(tǒng)中 我主要完成了下面介紹的幾個場景建模。 地形的建模主要是通過用四邊形近似模擬和紋理貼圖的方 法來實現(xiàn)的,導入 64*64 的位圖圖片,在 xz 平面建立 64*64 的網(wǎng)格,每 4 個點代表四邊形,每個點的 y 坐標確定下來為 0, x, z坐標等于對應像素的值乘以比例值。然后往格子上貼地形紋理圖就構成了簡單的地形。 飛機的模型是從 Milkshape3D 中提取出來的, Milkshape3D 是一個很好的建模軟件,它擁有屬于自己的文件格式,通過載入 MS3D 模型,讀取模型數(shù)據(jù),經(jīng)過轉換然后在 OpenGL環(huán)境中構建出來的。 天空的建模方式有很多種,而基本的做法有兩種,一種是 “ 天空盒 ” 法,另一種是 “ 天空球 ” 法。 “ 天空盒 ” 法是一個由長 方體,在它的各個面上面貼有表示天的圖片組成的。 “ 天空球 ” 法是由一個球體,在它的表面貼上一張?zhí)炜占y理圖組成的。此紋理圖上最好有帶云彩的圖像,這樣會使場景模擬帶有更高的真實感。 “ 天空球 ” 相對于 “ 天空盒 ”來說 要簡單得多,因為它只需要一副紋理圖,并且計算機會自動計算紋理坐標。而 “ 天空盒 ” 需創(chuàng)建六張紋理圖,且要自己計算紋理坐標,所消耗的內(nèi)存比較大。為了方便系統(tǒng)的繪圖和提高速度,本課題采用 “ 天空球 ” 法 [5]。 場景渲染 場景渲染對于三維可視化是至關重要的,因為渲染的效果的好壞能夠決定三維場景的真實性高低。本系統(tǒng) 主要運用了紋理映射、霧化 、 光照處理等渲染技術來模擬三維場景的真實性。 紋理映射是把紋理空間中的紋理像素映射到屏幕空間中的像素的過程,開發(fā)者可以通過所需要的方式把紋理圖像映射到物體表面,利用紋理映射功能可以逼真地 展現(xiàn) 物體表面細節(jié)。本課題中主要對三維場景中的地面和天空進行了紋理渲染,同時利用 3D 圖形的旋轉、平移技術實現(xiàn)物體隨觀察方向的改變而轉動的效果。 自然界里的霧是不定的、多變的,這樣的霧是很難計算模擬的。計算機一般模擬的是自然界中的濃霧、云煙、虛化的場景。簡而言之,霧化就是計算機通過虛化處理屏幕中的場景物體 ,使它們看起來像在霧中的物體一樣。霧化可以根據(jù)到視點的距離逐漸把物體的顏色變淡到背景色,霧化有三種不同的設置方式,可以根據(jù)實際所需來使用 , 系統(tǒng)采用的線性霧化。 福州大學陽光學院本科生畢業(yè)設計(論文) 6 紋理映射 紋理映射的概述 一般要在屏幕上顯示對象的方法有兩種,一是可以使用對象的幾何模型,然后把它送入幾何流水線(計算機可以達到每秒處理上百萬計的多邊形)。二是用像素塊來表示對象,但這兩種方法都有一定的局限,幾何流水線的系統(tǒng)在模擬很多自然現(xiàn)象(如草地、云彩、火焰)時處理多邊形的速度仍然難以滿足需求。像素雖然可以清晰的表現(xiàn)局部細節(jié), 卻只具備二維屬性 , 因此,本課題采用紋理映射的技術把每種方法的優(yōu)點結合起來。 紋理映射技術原理是通過把紋理空間坐標 ? ?ts, 與物體空間坐標的每一點 ? ?zyx , 建立關聯(lián),實現(xiàn)把二維的紋理圖像映射到三維物體的表面。能夠把二維的紋理圖像映射到三維物體的表面, 從而呈現(xiàn)出真實視覺效果 [6]。 例如可以把巖石的圖像應用到一個立方體上,這樣這個立方體看起來就像是一個打磨過的立方體的巖石了。 紋理映射的使用 紋理映射操作包括啟用紋理及載入紋理,指 定紋理坐標,設置紋理參數(shù),使用紋理對象等方面。使用的時候有個地方要特別的注意,紋理貼圖在顏色索引模式下使用是錯誤的,OpenGL 規(guī)定紋理貼圖須在 RGBA 模式下 [7]。本系統(tǒng)啟用了 OpenGL 中的紋理映射 技術 來對三維場景中的地面和天空進行紋理渲染,實現(xiàn)過程如下: ( 1) 首先要創(chuàng)建紋理對象并且要為此對象指定紋理。 調(diào)用 glGenTextures()函數(shù)創(chuàng)建紋理對象,使用一個正整數(shù)作為紋理對象的編號。使用此函數(shù) 會生成一系列紋理的名字,并 將其 存儲到指定的數(shù)組中 。 最后 調(diào)用glBindTexture()函數(shù)實現(xiàn) 把 生成的紋理的名字綁定到對應的目標紋理上。 ( 2) 控制濾波方式。 OpenGL 在圖像顯示的時候,有可能顯示的圖像比原始的紋理大,也有可能比原始的紋理小,這種情況在紋理映射給多邊形的物體時很常見,因此,要控制濾波方式,使其局部縮小或放大。我采用的是 GL_LINEAR 方式,這樣紋理不管從場景的遠處或者屏幕的近處都可以平滑的顯示。 ( 3) 啟用紋理及載入紋理數(shù)據(jù)。 首先要啟用紋理, OpenGL支持三種紋理,包括一維、二維、三維紋理,本課題使用的是二維紋理,調(diào)用 glEnable(GL_TEXTURE_2D)來啟用, 載入紋理數(shù)據(jù)是通過自定義函數(shù)把文件目錄下的位圖讀取到內(nèi)存空間。要注意的是 OpenGL 以前的版本有對紋理進行限制,要求紋理的大小必須是 2的冪,雖然新版本的 OpenGL 取消了這個限制,但由于某些 PC 機顯卡的驅動程序附帶的 OpenGL 不一定能支持新版本的 OpenGL,所以最好使用 2 的冪大小的紋理,且最大不能超過 1024*1024。 基于 OpenGL 的飛機虛擬場景漫游模擬 7 ( 4) 繪制三維場景,提供幾何圖形坐標和紋理坐標。 貼紋理的時候要明確要映射的物體和紋理直接的相對關系,如同現(xiàn)實生活中往手機上貼膜一樣,必須把紋理的四個角正確的映射到物體的對應的角上。在 OpenGL 里,幾何圖形上的坐標與紋理之間的映射是通過函數(shù) glTexCoord*()函數(shù)來實現(xiàn)的。此函數(shù)有兩個參數(shù),第一個參數(shù)是 x坐標,第二個參數(shù)是 y坐標。 X坐標有三種取值: 代表是紋理的右側, 代表是紋理的中點, 代表紋理的左側。同樣, Y 坐標也有三種取值: 代表紋理的頂部, 代表紋理的中點, 代表紋理的底部。 ( 5) 禁用紋理映射 禁用紋理映射主要是調(diào)用 glDisable(GL_TEXTURE_2D)來禁用。 位圖 計算機通常用像素圖和矢量圖來保存圖像,像素圖是把 圖像縱橫分為若干的行和列,行和列之間組成的每一小塊分塊稱之為像素,因為它保存了每一小塊的像素的顏色,所以它可以保存整個圖像。而矢量圖詳細地保存了圖像中的每一個點的形狀、大小、位置,數(shù)據(jù)保存得比較完整。 矢量圖不管是對其放大縮小都不會失真,而 像素圖 在放大縮小時有可能會失真。不過像素圖的運算量和數(shù)據(jù)量一般都比較小且不會因圖像復雜增加。而矢量圖的運算量和數(shù)據(jù)量都比像素圖大很多??紤]到程序的運行速度,本課題采用的紋理圖都是 BMP 格式的文件,BMP 文件就是一種像素圖 。 它可以保存 24 位真彩色圖像、單色位圖、 256 色或 16 色索引模式的像素圖 [8]。 霧化 霧化的概述 霧化是 OpenGL 所支持的一種容易使用的特效,是一種模擬自然界中霧氣(煙霧,薄霧,濃煙等)對場景物體視覺效果產(chǎn)生直接影響的圖形繪制技術。在使用霧化時 , OpenGL會把開發(fā)者指定的霧的顏色與完成了其他顏色計算的幾何圖形進行混合。它所產(chǎn)生的效果是一個包含霧的 3D場景。 霧化特效在場景渲染中起到很大的作用,在三維可視化中應用非常廣泛。 使用霧化特效可以直接加深場景的距離感和縱深感,增強了場景的真實性 ,且可以提高繪制速度,減少計算量。合理使用霧化,可 以很好的表現(xiàn)出視點到物體的距離感,實現(xiàn)逐漸變模糊的物體 [9]。 霧化的使用 福州大學陽光學院本科生畢業(yè)設計(論文) 8 霧化的使用并不復雜,具有以下幾個步驟: ( 1) 開啟霧化特效:調(diào)用函數(shù) glEnable(GL_FOG)來 啟用霧化,啟用后離視點比較遠的場景中的物體會淡化成霧的顏色。 ( 2) 控制霧的濃度和顏色:調(diào)用函數(shù) glFog*()來決定霧的濃度和顏色。 ( 3) 設置霧化的效果:如果要使用片段霧(更好的外觀質(zhì)量,不過所需開銷也大),可以調(diào)用 glHint(GL_FOG_HINT,GL_NICEST)。如果為了節(jié)約內(nèi)存,實現(xiàn)更快不過精確度稍低的 霧可以調(diào)用 glHint(GL_FOG_HINT,GL_FASTEST)。 其中 glFog*()函數(shù)原型為 : void glFog{if}[v](GLenum pname,TYPE param), 第一個參數(shù)用來設置霧的效果,第二個參數(shù)用來設置相關的霧的效果值。當 paname為 GL_FOG_MODE 時,表示使用哪種霧方程式,參數(shù) param 可以為 GL_LINEAE(線性 )、 GL_EXP(指數(shù) )和GL_EXP2(指數(shù)平方 )。 相關代碼如下: //開啟霧化 if(nChar==70) // 通過 ascii 碼判斷 按下 鍵 盤的 39。F39。鍵 { fog=!fog。 //霧化開啟標志 初值為 false,此處將標志置為 true } void CPlaneView::drawFog(bool fog) { if(fog){ static GLint fogMode。 fogMode = GL_EXP2。 glEnable(GL_FOG)。// 打開霧化效果 {
點擊復制文檔內(nèi)容
高考資料相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1