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

正文內(nèi)容

基于opengl的3d游戲的設(shè)計(jì)與實(shí)現(xiàn)-資料下載頁

2025-11-08 21:51本頁面

【導(dǎo)讀】滿足人們對這方面的需求。人們對游戲的畫面,動畫的逼真度,易操作性以及游。戲的思想,故事情節(jié)越來越重視。許多大型的3D游戲大部分都產(chǎn)自國外,而國。的制作思想,以及游戲的可玩性都尚有不足。近幾年國內(nèi)制作的3D游戲也慢慢。目前使用openGL實(shí)現(xiàn)其游戲畫面方面的效果還是主流之。本課題就是基于VisualStudio2020平臺的3D游戲,雖然目前的程序有些簡。單,但這是為制作復(fù)雜3D游戲打下基礎(chǔ)。本游戲主要由四個(gè)部分組成:視角控制,天空,地面和模型載入。他文件調(diào)用函數(shù)庫里的文件。礎(chǔ)框架類等系統(tǒng)運(yùn)行必備的一些基礎(chǔ)類。類后,我們就可以建立天空類,地形類了。然后用一個(gè)SkyAndTerrain把這兩個(gè)

  

【正文】 圖 天空紋理載入坐標(biāo)圖 本實(shí)驗(yàn)是用 CBMPLoader m_texture[5]。將五張下好的天空紋理圖分別載入到如上圖所示的空間中 , 分別為前( front)、后 (back)、左 (left)、右 (right)、上 (top)。在每次進(jìn)行矩陣變換前都要用 glPushMatrix()進(jìn)行入棧, 然后 用 glPopMatrix()出棧, 這樣操作不至于影響后面的矩陣操作。 glTranslate()的作用是每一次操作都把當(dāng)前所在的位置作為原點(diǎn)。 glRotatef()每一次操作都是相對于當(dāng)前原點(diǎn)的(而不是屏幕的中央) 其基本步驟如下: 第一步 定義數(shù)組用來保存文件名: char *bmpName[] = { back,front,top,left,right}。 for(int i=0。 i 5。 i++) { sprintf(filename,data/%s,bmpName[i])。 strcat(filename,.bmp)。 第二步 :生成紋理對象數(shù)組 glGenTextures(1, amp。m_texture[i].ID)。 第三步 :通過使用 glBindTexture 選擇紋理對象,來完成該紋理對象的定義。 glBindTexture(GL_TEXTURE_2D, m_texture[i].ID)。 精品畢業(yè)論文、畢業(yè)設(shè)計(jì),優(yōu)質(zhì)的論文服務(wù): 精品論文網(wǎng) 提供畢業(yè)設(shè)計(jì) (論文)和圖文教程、視頻教程等一攬子解決方案 第四步 :在繪制景物之前 通過 glBindTexture,為該景物加載相應(yīng)的紋理。 gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, m_texture[i].imageWidth, m_texture[i].imageHeight, GL_RGB, GL_UNSIGNED_BYTE, m_texture[i].image)。 第五步 :在程序結(jié)束之前調(diào)用 glDeleteTextures 刪除紋理對象。 這里定義了一個(gè)析構(gòu)函數(shù): CSkyBox::~CSkyBox()來實(shí) 現(xiàn)釋放所占用的內(nèi)存 CSkyBox::~CSkyBox() { for(int i =0 。i 5。 i++) { m_texture[i].FreeImage()。 glDeleteTextures(1,amp。m_texture[i].ID)。 } } 如下是一部分核心代碼的實(shí)現(xiàn): glPushMatrix()。 glTranslatef(,)。 glRotatef(yRot,)。 /** 繪制背面 */ glBindTexture(GL_TEXTURE_2D, m_texture[0].ID)。//GL_TEXTURE_2D:繪制 2D紋理 glBegin(GL_QUADS)。 /** 指定紋理坐標(biāo)和頂點(diǎn)坐標(biāo) */ glTexCoord2f(, )。 glVertex3f( width, height, length)。 glTexCoord2f(, )。 glVertex3f( width, height, length)。 glTexCoord2f(, )。 glVertex3f( width, height, length)。 glTexCoord2f(, )。 glVertex3f( width, height, length)。 glEnd()。 ?? glPopMatrix(); 精品畢業(yè)論文、畢業(yè)設(shè)計(jì),優(yōu)質(zhì)的論文服務(wù): 精品論文網(wǎng) 提供畢業(yè)設(shè)計(jì) (論文)和圖文教程、視頻教程等一攬子解決方案 ?? 其中: glTexCoord2f(, )。表示將紋理 texture[0]的右下角坐標(biāo) (, )映射到立方體前面那個(gè)面的頂點(diǎn) ( width, height, length)上; glTexCoord2f(, )。表示將紋理 texture[0]的右上角坐標(biāo) (, )映射到立方體前面那個(gè)面的頂點(diǎn) ( width, height, length)上; glTexCoord2f(, )。表示將紋理 texture[0]的左上角坐標(biāo) (, )映射到立方體前面那個(gè)面的頂點(diǎn) ( width, height, length)上。 glTexCoord2f(, )。表示將紋理 texture[0]的左下角坐標(biāo) (, )映射到立方體前面那個(gè)面的頂點(diǎn) ( width, height, length)上; 這樣,紋理 texture[0]就被映射到了立方體前面那個(gè)面上。 另外本游戲還是用了 yRot += 。 if(yRot ) yRot = 。 來實(shí)現(xiàn)整個(gè)天空盒的旋轉(zhuǎn),以更加真實(shí)的變現(xiàn)天空的效果,使天上的云朵看下來動了。 7 模型設(shè)計(jì) 模型概述 在實(shí)際的三維 圖形程序,需要構(gòu)建的三維模型一般來說都比較復(fù)雜。雖然OpenGL 提供了十幾個(gè)生成三維球體、立方體和圓柱體等實(shí)體模型的輔助函數(shù),但這些函數(shù)難以滿足建立復(fù)雜三維實(shí)體的需要, OpenGL 的建模功能并不是很強(qiáng)大。想單純利用 OpenGL 實(shí)例庫提供的幾何體構(gòu)建就非常困難,而且也不可能一次性在內(nèi)存中編寫繪圖語句,在效率上和模型逼真度上都比較低。因此我們常利精品畢業(yè)論文、畢業(yè)設(shè)計(jì),優(yōu)質(zhì)的論文服務(wù): 精品論文網(wǎng) 提供畢業(yè)設(shè)計(jì) (論文)和圖文教程、視頻教程等一攬子解決方案 用專門的建模工具(如 3D MAX、 Maya)來建立高逼真度的模型,再將模型導(dǎo)出為特定的格式,然后再將模型導(dǎo)入三維場景中實(shí)現(xiàn)繪制與控制。 目前在計(jì)算機(jī)平臺上,常用的 3D 模 型有 3DS、 OBJ、 MD MS3D 等多種格式。 3D 模型又分為靜態(tài)模型(如 3DS、 OBJ)和動態(tài)模型(如 MD MDMS3D) 。在動態(tài)模型中除了保存模型的定點(diǎn)和表面數(shù)據(jù)外,還有與動畫相關(guān)的信息,這些動態(tài)模型渲染起來比較復(fù)雜。 下面主要介紹了我們用到的 MD2 模型和 MD3 模型: Quake2 和 Quake3 模型格式由著名游戲公司 ID 公司自主設(shè)計(jì),廣泛應(yīng)用于 ID 公司開發(fā)的各種三維游戲中,其文件擴(kuò)展名為 MD2 和 MD3。由于兩種模型的文件格式相對比較簡單,容易實(shí)現(xiàn),所以應(yīng)用很廣,是一種經(jīng)典的動畫模型格式,在其他一些 三維圖形程序中也逐漸得到了應(yīng)用。這兩種模型都由兩部分組成如圖 所示: 圖 MD2文件結(jié)構(gòu)圖 MD2 格式說明 MD2 模型的紋理是隔離出來的,不包括在 MD2 文件內(nèi)部。一個(gè) MD2 模型在同一個(gè)時(shí)刻只能有一種紋理。在存儲結(jié)構(gòu)上, MD2 文件建模的原理是用三角形來描述復(fù)雜的物體,即所有的物體都是三角形組成的。因此要從文件中讀取各三角形的點(diǎn)的位置、紋理坐標(biāo)來顯示圖形。 MD2 文件組成分為五部分:文件頭、紋理坐標(biāo)集合、三維對象組成點(diǎn)集合、組成三角形的 點(diǎn)的索引集合、三角形的紋理坐標(biāo)的索引集合。 文件信息頭部分包括 17 種數(shù)據(jù),其具體定義 如下 所示 : 文件信息頭的定義 , 下面是 MD2 的文件頭定義: // md2 header typedef struct 頭文件 文件主體 包含 ID 號,版本號,和有關(guān)模型的各種數(shù)據(jù)的起始地址等 有關(guān)文件的各種數(shù)據(jù),如頂點(diǎn)數(shù)據(jù)、紋理數(shù)據(jù)、法向量數(shù)據(jù)等。 精品畢業(yè)論文、畢業(yè)設(shè)計(jì),優(yōu)質(zhì)的論文服務(wù): 精品論文網(wǎng) 提供畢業(yè)設(shè)計(jì) (論文)和圖文教程、視頻教程等一攬子解決方案 { int ident。 // 文件標(biāo)識 . 必須是 IPD2 int version。 // md2 版本 . 等于 8 int skinwidth。 // 紋理寬度 int skinheight。 //紋理高度 int framesize。 // 每一幀占的字節(jié)數(shù) int num_skins。 // 紋理的數(shù)目 int num_xyz。 // 三維空間中點(diǎn)數(shù) int num_st。 // 紋理的坐標(biāo)數(shù) int num_tris。 //三角形的數(shù)目 int num_glcmds。 // OPENGL 命令數(shù)目 int num_frames。 // 文件包含的幀數(shù) int ofs_skins。 // 紋理名稱的偏移量 (每個(gè) 64 字節(jié) ) int ofs_st。 // 存儲紋理坐標(biāo)偏移量 int ofs_tris。 // 存儲三角形地址偏移量 int ofs_frames。 //存儲幀的地址偏移量 int ofs_glcmds。 // 存儲 OPENGL 命令的地址偏移量 int ofs_end。 // 文件結(jié)尾的偏移量 } md2_t。 利用以上這些信息,就可以編制相應(yīng)算法,定位到需要的地方。 編譯原理 編程原理是:三角形的每個(gè)點(diǎn)在點(diǎn)坐標(biāo)的集合中有個(gè)索引值,通過索引可以得到每個(gè)三角形的組成點(diǎn)的位置。同理,三角形的紋理坐標(biāo)在紋理坐標(biāo)集合中也有索引,通過索引可以獲得紋理坐標(biāo)值。繪制三角形時(shí),要先通過索引指向點(diǎn)集合中和紋理坐標(biāo)集合中的相應(yīng)位置,再取出數(shù)據(jù)繪制 。所以要準(zhǔn)備幾個(gè)緩存:存放三角形組成點(diǎn)在點(diǎn)集合中索引的緩存、存放三角形紋理在紋理集合中索引的緩存、存放點(diǎn)集合的緩存、存放紋理坐標(biāo)集合的緩存。有了以上幾個(gè)緩存,就可以顯示場景并對其進(jìn)行渲染。 如要顯示動畫的話,就要求每隔一定時(shí)間就對畫面進(jìn)行刷新,所以在程序中先開個(gè)定時(shí)器,每隔一定時(shí)間刷新頁面,刷新時(shí)做的工作就是讀入下一幀的數(shù)據(jù),進(jìn)行顯示,從而實(shí)現(xiàn)連續(xù)的動畫效果。 讀取 MD2 文件方法的實(shí)現(xiàn) 讀取 MD2 文件的關(guān)鍵在于定義合理的數(shù)據(jù)結(jié)構(gòu)和使用優(yōu)秀的算法。 首先精品畢業(yè)論文、畢業(yè)設(shè)計(jì),優(yōu)質(zhì)的論文服務(wù): 精品論文網(wǎng) 提供畢業(yè)設(shè)計(jì) (論文)和圖文教程、視頻教程等一攬子解決方案 要從 MD2 文件中得到文件頭信息。先用二進(jìn)制方 式打開一個(gè)文件 “ ” 。然后把整個(gè)文件一股腦讀到一個(gè) buffer 緩存區(qū)去。文件一開始就是頭信息,利用頭文件信息得到點(diǎn)數(shù)據(jù)到文件頭的偏移量,定位到點(diǎn)數(shù)據(jù)開始的地方。然后定義數(shù)組。接著再根據(jù)各三角形的點(diǎn)的索引值把在 pointList[]查到三角形組成點(diǎn)的坐標(biāo),就可以畫出復(fù)雜三維場景了。 載入 MD2 文件的重要函數(shù)為: bool CMD2Loader::ImportMD2(t3DModel *pModel, char *strFileName, char *strTexture)。讀 取文件的流程圖如圖 所示: 圖 讀取 MD2文件 流程圖 由于文件中是關(guān)鍵幀的數(shù)據(jù),如果每隔一定時(shí)間顯示一個(gè)關(guān)鍵幀的圖像,動畫會極不連續(xù),為此我們引入一個(gè)比例因子,目的在于在兩個(gè)相鄰關(guān)鍵幀之間線性插值插入若干幀,使畫面流暢。 繪制插值點(diǎn)流程圖如圖 : 打開文件 檢查文件指針 讀取文件頭 檢查版本號 讀取 MD2文件 將 MD2數(shù)據(jù)轉(zhuǎn)換為模型結(jié)構(gòu) 精品畢業(yè)論文、畢業(yè)設(shè)計(jì),優(yōu)質(zhì)的論文服務(wù): 精品論文網(wǎng) 提供畢業(yè)設(shè)計(jì) (論文)和圖文教程、視頻教程等一攬子解決方案 圖 繪制插值點(diǎn)流程圖 8 游戲運(yùn)行截圖 遍歷所有面
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1