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

正文內容

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

2025-04-03 10:03 本頁面
 

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