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

正文內(nèi)容

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

2025-04-03 10:03 本頁面
 

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