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

正文內(nèi)容

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

2025-04-03 10:03 本頁(yè)面
 

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