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

正文內(nèi)容

畢業(yè)論文-基于opengl的3d游戲設(shè)計(編輯修改稿)

2025-01-06 22:15 本頁面
 

【文章內(nèi)容簡介】 顏色模式設(shè)置: OpenGL 顏色模式有兩種,即 RGBA 模式和顏色索引( Color Index)。 光照和材質(zhì)設(shè)置: OpenGL 光有自發(fā)光( Emitted Light)、環(huán)境光( Ambient Light)、漫反射光( Diffuse Light)和高光( Specular Light)。材質(zhì)是用光反射率來表示。場景( Scene)中物體最終反 映到人眼的顏色是光的紅綠藍(lán)分量與材質(zhì)紅綠藍(lán)分量的反射率相乘后形成的顏色。 紋理映射( Texture Mapping)。利用 OpenGL 紋理映射功能可以十分逼真地表達(dá)物體表面細(xì)節(jié)。 功能 建模 變換 顏色模式設(shè)置 光照和材質(zhì)設(shè)置 紋理映射 雙緩存動畫 位圖顯示 西安石油大學(xué)畢業(yè)設(shè)計(論文) 7 位圖顯示和圖象增強(qiáng)圖象功能除了基本的拷貝和像素讀寫外,還提供融合( Blending)、抗鋸齒(反走樣)( Antialiasing)和霧( fog)的特殊圖象效果處理。以上三條可使被仿真物更具真實感,增強(qiáng)圖形顯示的效果。 雙緩存動畫( Double Buffering)雙緩存即前臺緩存和后臺緩存,簡言之,后臺緩存計算場景、生成畫面,前臺 緩存顯示后臺緩存已畫好的畫面。 此外,利用 OpenGL 還能實現(xiàn)運(yùn)動模糊、深度暗示等特殊效果,利用這些效果可以實現(xiàn)消隱算法。 OpenGL渲染 實現(xiàn)絕大部分 OpenGL 操作順序都十分相似,即就是 OpenGL 渲染管線的一系列相關(guān)的處理階段。它的操作順序如圖 22: 圖 23 OpenGL渲染流程 顯示列表:任何數(shù)據(jù),不管它所描述的是幾何圖形還是像素,都可以保存在顯示列表中,供當(dāng)前貨以后使用。 求值器:所有的幾何圖元最終都要根據(jù)定點(diǎn)來描述。 基于頂點(diǎn)的操作:對于頂點(diǎn)數(shù)據(jù),接下里的一個步驟就是“基 于頂點(diǎn)的操作”,就是把頂點(diǎn)變換為圖元。 圖元裝配:圖元裝配的一個主要部分就是裁剪,它的任務(wù)是消除那些位于一個半空 片段操作 評估 紋理裝配 基于定點(diǎn)的操作和圖元裝配 緩沖幀區(qū) 像素操作 光柵化 顯示列表 像素數(shù)據(jù) 頂點(diǎn)數(shù)據(jù) 西安石油大學(xué)畢業(yè)設(shè)計(論文) 8 間之外的那部分幾何圖元,而這個班空間是有一個平面所定義的。點(diǎn)裁剪就是簡單地接受或拒絕頂點(diǎn),直線或多邊形裁剪則能夠添加額外的頂點(diǎn),具體取決于直線或多邊形是如何進(jìn)行裁剪的。 像素操作:首先,來自系統(tǒng)內(nèi)存的一個數(shù)組中的像素進(jìn)行解包,從多種格式之一的解包為適當(dāng)數(shù)量的成分。接著,數(shù)據(jù)被縮放、便宜,并根據(jù)像素圖進(jìn)行處理。處理結(jié)果先進(jìn)行截取,然后或者寫入到紋理內(nèi)存,或者發(fā)送到光柵化階段。 紋理裝配: OpenGL 應(yīng)用程序可以在幾何物體上應(yīng)用紋理圖形,使它們看上去更為逼真。 光柵化:光柵化就是把幾何數(shù)據(jù)和像素數(shù)據(jù)轉(zhuǎn)換為片段的過程。 片段操作:在數(shù)據(jù)使勁存儲到幀緩沖區(qū)前,將要執(zhí)行一系列操作。這些操作可能會修改甚至丟棄這些片段。所有這些操作都可以被啟用或者禁用。 3D 圖形學(xué)相關(guān) 向量與矩陣 向量 ,在 數(shù)學(xué) 中的定義是,既有大小又有方向的量。三維的向量 ? ?00 zy0x ,分別表示的是沿 X 坐標(biāo)方向、 Y 坐標(biāo)方向和 Z 坐標(biāo)方向的位移。 3D 程序是使用 4D 向量? ?1000 zyx ,這樣主要方便進(jìn)行移動變換,第四維通常只取 “ 1” 。 矩陣 ,在 數(shù)學(xué) 中的定義是,縱橫排列的二維數(shù)值列陣。 3D 程序是使用的 4 4 的矩陣對向量, 這樣主要方便進(jìn)行移動變換。 ????????????1000000210210210zzzyyyxxx 變換 變換可以分為平移變換、旋轉(zhuǎn)變換、縮放變換。 平移變換:可以被認(rèn)為是把一個點(diǎn)從 3D 空間中的一個坐標(biāo)位置移動到另一個坐標(biāo)位置。要對一個點(diǎn)進(jìn)行平移變換,只需要將每個坐標(biāo)軸的增量值,或者說沿每個坐標(biāo)軸的平移數(shù)值,加上要平移坐標(biāo)點(diǎn)的原始坐標(biāo)值就行了。 旋轉(zhuǎn)變換:在 x軸旋轉(zhuǎn)時,其 x 軸坐標(biāo)表示不變。關(guān)于 y軸的旋轉(zhuǎn)與 z軸的旋轉(zhuǎn)也是同樣的道理。要讓一個點(diǎn)繞某一坐標(biāo)軸旋轉(zhuǎn),就用此坐標(biāo)軸旋轉(zhuǎn)矩陣乘以這個點(diǎn)。旋轉(zhuǎn)變換所形成的連續(xù)組合變換的思路是合并矩陣,將幾個變換矩 陣合并成一個變換矩陣,先繞 z軸轉(zhuǎn),再繞 y軸轉(zhuǎn),最后繞 x 軸旋轉(zhuǎn)。 縮放變換:通過將頂點(diǎn)與一個縮放因子相乘的方法來縮放頂點(diǎn)。 在 3D圖形學(xué)中,要涉及到兩種投影,一種是平行投影,另一種則是透視投影。 西安石油大學(xué)畢業(yè)設(shè)計(論文) 9 平行投影,即就是 在一束 平行光線 照射下形成的 投影 。平行投影可以分兩步來完成,第一步先將投影 的平面轉(zhuǎn)換到 3D 空間中的 xy 平面上,第二部就是除去所有可見點(diǎn) z項的坐標(biāo)信息。 透視投影,則 是用中心投影法將形體投射到投影面上,從而獲得的一種較為接近視覺效果的單面投影圖 。 透視投影符合人們心理習(xí)慣,即離視點(diǎn)近的物體大,離視點(diǎn)遠(yuǎn)的物體小,遠(yuǎn)到極點(diǎn)即為消失,成為滅點(diǎn) ,如圖 24: 圖 24 投影 3D裁剪 當(dāng)物體的世界坐標(biāo)超值超過屏幕視區(qū)范圍時,對物體進(jìn)行透視變換操作就可能引起錯誤。特別在 z值為 0 時,錯誤就會發(fā)生;當(dāng) z軸為負(fù)數(shù)時,物體處在觀察者后面,就無需進(jìn)行變換。解決這一問題通常是創(chuàng)建一個視體 (視體其就是 3D 空間中相對于觀察者為可見的一個區(qū)域)。在視體外的任何物體都不能被觀察者看到,因此就不能對其進(jìn)行變換。對于透視投影來說,視體為金字塔形,如圖 25: 西安石油大學(xué)畢業(yè)設(shè)計(論文) 10 圖 25 透視投影的物體總是金字塔形狀 西安石油大學(xué)畢業(yè)設(shè)計(論文) 11 3 游戲設(shè)計 游戲的組成 一個游戲作品可以分為游戲引擎和游戲資源兩大部分。 游戲 引擎是一個為運(yùn)行某一類游戲的機(jī)器設(shè)計的能夠被機(jī)器識別的代碼(指令)集合。它像一個發(fā)動機(jī),控制著游戲的運(yùn)行。游戲資源包括聲音 、 圖象 、 動畫等部分,游戲 =引擎(程序代碼) +資源(聲音 、 動畫 、 圖象等)。游戲引擎則是按游戲設(shè)計的要求順序的調(diào)用這些資源。 對于一個游戲的開發(fā)來說,游戲資源反映了一個游戲所能帶給人們的感官刺激,而游戲引擎的優(yōu)良程度則是這款游戲可玩性的一個重要指標(biāo)。 對于一個簡單的游戲來說,它的游戲引擎可以分成輸入設(shè)備、游戲邏輯、場景數(shù)據(jù)庫、音頻子系統(tǒng)、場景物體對象、紋理處理、物理子系統(tǒng)、粒子系統(tǒng)。它們之間的關(guān)系如圖 31: 圖 31 游戲引擎組成 在實際運(yùn)行中,引擎通過設(shè)備輸入子系統(tǒng)接受輸入,并向游戲邏輯子系統(tǒng)發(fā)送相應(yīng)的消息,然后游戲邏輯子系統(tǒng)處理相應(yīng)的消息,并執(zhí)行相應(yīng)的一個游 戲循環(huán)。在單一游戲循環(huán)之中,游戲邏輯子系統(tǒng)對如如做出反應(yīng),對游戲物體對象之星所需要的所有物理計算、處理碰撞檢測和反應(yīng)、載入和銷毀物體對象、在場競爭移動視點(diǎn)、以及播放游戲運(yùn)行時所需要的所有聲音。 游戲的結(jié)構(gòu) 對于游戲的開發(fā),需要有一個游戲結(jié)構(gòu)的設(shè)計,可以開發(fā)更多的組件以實現(xiàn)特殊的 輸入設(shè)備 游戲邏輯 粒子系統(tǒng) 物理子系統(tǒng) 場景物體對象 紋理處理 場景數(shù)據(jù)庫 音頻子系統(tǒng) 西安石油大學(xué)畢業(yè)設(shè)計(論文) 12 性能和功能,來保障游戲軟件的平穩(wěn)運(yùn)行。游戲與其它應(yīng)用軟件有著一定的區(qū)別,它不是我們的單線、事件驅(qū)動或順序邏輯的程序。一個 3D 游戲本質(zhì)上是一個持續(xù)不斷的while 循環(huán),它執(zhí)行邏輯并在屏幕上不間斷的繪制更新圖像,如圖 32: 圖 32 一個游戲的組成 本游戲設(shè)計 在本次設(shè)計中所展示的是一個 3D 射擊類游戲,要求玩家在限時內(nèi),在場景沖找出所有敵人并將其消滅。 游戲中所包括的性能有粒子爆炸效果、 MD2 模型的載入、動畫和邊界碰撞檢測、視點(diǎn)的控制和移動、聲音效果、簡易 AI 系統(tǒng)、地形的繪制與生成。在組成上則是采用游戲引擎 +游戲資源的設(shè)計方法來設(shè)計并實現(xiàn)游戲。 游戲框架結(jié)構(gòu)如圖 3圖 3圖 35和圖 36: 其它 紋理 音樂 聲音 三維模型 物理 游戲數(shù)據(jù)庫 輸入 輸入 游戲邏輯 游戲邏輯 輸入 游戲邏輯 西安石油大學(xué)畢業(yè)設(shè)計(論文) 13 圖 33 游戲工程結(jié)構(gòu) 圖 34 source files內(nèi)含結(jié)構(gòu) 西安石油大學(xué)畢業(yè)設(shè)計(論文) 14 圖 35 header files內(nèi)含文件結(jié)構(gòu) 圖 36 external dependencies內(nèi)含文件結(jié)構(gòu) 下面,這里主要說明一下,此游戲中所采用的關(guān)鍵技術(shù)。 西安石油大學(xué)畢業(yè)設(shè)計(論文) 15 4 關(guān)鍵技術(shù) 攝像機(jī)漫游 在 3D 游戲中,用戶通??梢酝ㄟ^鼠標(biāo)或者鍵盤操作角色在場景中移動,進(jìn)而完成各種有意思、富有挑戰(zhàn)的任務(wù),大道場景漫游的效果。這是人機(jī)交互的一種重要體現(xiàn),能夠大大提高游行可玩性,這就需要用到漫游。 而在三維場景漫游中,觀察各可以通過鼠標(biāo)或鍵盤來控制視點(diǎn)的位置、視向和參考方向。當(dāng)視點(diǎn)的位置、視向和參考方向發(fā)生改變時, 場景中的物體相對于觀察者的方位也發(fā)生了變化,從而產(chǎn)生了“動感”。系統(tǒng)中,視點(diǎn)即就是人的“化身”。其功能與現(xiàn)實世界的攝像機(jī)類似,視線方向可由參考點(diǎn)位置確定(參考點(diǎn)位置減去視點(diǎn)位置即可得到視線方向的向量)。在游戲中,由攝像機(jī)來成為人在游戲中的視點(diǎn),通過攝像機(jī)發(fā)生變化,從而引起視角的變化,這樣就模擬了游戲角色所觀察到的景物的變化。 在游戲中,需要通過鍵盤上的方向鍵實現(xiàn)先后左右的移動,通過鼠標(biāo)的拖拽實現(xiàn)旋轉(zhuǎn)視圖以從多角度觀察地物。實際上,在場景漫游時可以通過設(shè)置視點(diǎn)以及觀察方向來實現(xiàn),需要用到 OpenGL 輔助函數(shù)庫 中的 gluLookat()函數(shù),通過設(shè)置相應(yīng)參數(shù)實現(xiàn)場景漫游。 Void gluLookat(GLdouble eyex,GLdouble eyey, GLdouble eyez, GLdouble centerx,GLdouble centerxy, GLdouble centerxz, GLdouble upx,GLdouble upy, GLdouble upz)。 該函數(shù)的 9個參數(shù)定義了一個視圖矩陣,并使用該矩陣與當(dāng)前矩陣相乘。前三 個參數(shù) (eyex,eyey, eyez)定義了視點(diǎn)位置,即觀察者位置;中間三個參數(shù) (centerx, centery, centerz)定義了攝像機(jī)的參考點(diǎn),即攝像機(jī)的朝向;最后三個參數(shù) (upx, upy, upz)定義了攝像機(jī)的向上向量,一般定義為 (0, 1, 0)。 在計算機(jī)看到圖形時,我們的觀察點(diǎn)為( 0, 0, 0),也就是為什么我們總要把圖形Z 坐標(biāo)設(shè)為小于 0 的原因( Z 大于 0 是圖形在屏幕外面)。在 OpenGL 中觀察虛擬世界的主要函數(shù)是 gluLookAt(? ),它的主要作用是可以改變我們在 OpenGL 場景中 的觀察點(diǎn),看到前面的景物越來越近,兩邊的物體在向后退,這就是我們的觀察點(diǎn)在場景中的位置改變的結(jié)果。 gluLooKAt(視點(diǎn),目標(biāo)點(diǎn),視點(diǎn)方向) 其中視點(diǎn)(觀察點(diǎn))是一個三維坐標(biāo)向量。 X量的變化就像是我們在場景中的橫向移動。 Y量的變化就像是我們的身體高度的變化(游戲中角色的站立或臥倒)。 Z量的變化就像是我們在場景中前后移動。 目標(biāo)點(diǎn),視點(diǎn)方向也分別是三維向量。 西安石油大學(xué)畢業(yè)設(shè)計(論文) 16 視點(diǎn)的變化,相當(dāng)于我們?nèi)嗽趫鼍爸幸苿印? 目標(biāo)點(diǎn)的變化,相當(dāng)于我們?nèi)苏局粍訒r,頭或者手中的相機(jī)上下左右移動的效果。 視點(diǎn)方向 Y=1 表示我們的頭 始終是正立的。 圖 41反映了攝像機(jī)類相關(guān): 圖 41 攝像機(jī)類的組成 碰撞檢測 我們知道,幾乎所有的 3D 游戲都離不開碰撞檢測 —— 無論是各物體之間的碰撞檢測,還是物體與場景之間的碰撞檢測。比如說人物在場景中可以平滑移動,遇到一定高度內(nèi)的臺階可以自動上去,而過高的臺階則把人擋住,遇到斜率較小的斜坡可以上去,斜率過大則把人擋住,人物到場景邊緣而不會掉出場景等。 碰撞檢測算法主要有三種:基于包圍盒的碰撞檢測算法,基于距離計算的碰撞檢測算法,基于維諾圖的碰撞檢測算法。 包圍盒算法 軸平行包圍盒 AABB 算法 在一個 AABB 包圍盒的描述中,需要六個坐標(biāo)量,這是因為在進(jìn)行碰撞檢測時, AABB是每條邊都平行于坐標(biāo)軸 3D幾何體的外接平行六面體。在構(gòu)造軸平行包圍盒 AABB 的時候,需要 AABB 包圍盒在方向上具有一致性,這就使得構(gòu)造時要沿著物體局部坐標(biāo)系的軸向來構(gòu)造包圍盒。 根據(jù)鼠標(biāo)設(shè)置攝像機(jī)觀察方向 左右移動 前后移動 放置攝像機(jī)位置 攝
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1