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

正文內(nèi)容

畢業(yè)論文-基于opengl的3d游戲設(shè)計(jì)(參考版)

2025-01-19 21:12本頁面
  

【正文】 void FilterHeightField(float field[],int size,float filter)。 void NormalizeTerrain(float field[],int size)。 //掃描深度 float textureMul。 //地形比例值 float heightMul。具體類定義如下 class CTerrain : public CObject { private: int width。游戲用一個(gè)高度比例值與這些高程值相乘從而保證地形與其寬度保持合適比例。 在得到這些后,我們只要從 IDirectSoundDListener 接口設(shè)置 DS3DLISTENER 中的數(shù)據(jù)西安石油大學(xué)畢業(yè)設(shè)計(jì)(論文) 28 項(xiàng),并將其傳遞給 SetAllParameter()函數(shù),就設(shè)置好了聽者對象的 3D 參數(shù)。 .//衰減因子 D3DVECTOR flDopplerFactor。 //聽者的向上指向 D3DVECTOR glDistanceFactor。 //聽者的速度 D3DVECTOR vOrientFront。 //以字節(jié)數(shù)表示的 DS3DLISTENER 數(shù)據(jù)結(jié)構(gòu)大小 D3DVECTOR vPosition。 在 SetAllParameters()函數(shù)定于中,我們需要為 3D 聽者設(shè)置 DSDLISTENER 數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)項(xiàng): HRESULT SetAllParameters( LPCDS3DLISTENER pclistener。 為了獲取一個(gè)聽者對象,必須調(diào)用 IDirectMusicAudioPath8::GetObjecyInpath()函數(shù) //從 audiopath 獲取聽者對象 if ( FAILED(dmusic3DAudioPathGetObjectInPath(DMUS_PCHANNEL_ALL, DMUS_PATH_BUFFER, 0, GUID_NULL, 0, IID_IDirectSound3DBuffer, (void**)amp。如果所定義的向前矢量與向上矢量的夾角不為 90176。 聽者的方向是由兩個(gè)以聽者頭部中央為其起點(diǎn)的矢量所定義的;向前矢量與向上矢量。默認(rèn)情況下聽者是位于世界坐標(biāo)系的原點(diǎn),其方向指向世界坐標(biāo)系 z軸正向。消聲等因素:由于耳朵的形狀和朝向,肯定會(huì)使來自聽者前方的聲 音比后方的要強(qiáng)。耳間強(qiáng)度差:對于一個(gè)位于聽者左側(cè)的聲源,該聽者左指定紋理坐標(biāo) 檢查是否具有紋理 獲得該面中頂點(diǎn)和紋理索引 下面開始進(jìn)行幀插值 遍歷所有面 遍歷面的所有頂點(diǎn) 利用公式 : p(t) = p0 + t(p1 p0),得到插值點(diǎn) 西安石油大學(xué)畢業(yè)設(shè)計(jì)(論文) 27 耳聽到的聲音音量要比右耳所聽到的音量要大。 要確定聲音的位置,要輔助于人感知聲音的一些因素,如總響度、耳間強(qiáng)度差、耳間時(shí)間差、消聲等因素。 3D 聲音坐標(biāo),是一個(gè)擁有 x、 y、 z軸的笛卡爾坐標(biāo)系統(tǒng),以此定義了聲源和聽者的位置、速度以及方向。優(yōu)良的 3D音效,往往可以給游戲帶來意想不到的效果。 繪制插值點(diǎn)流程,如圖 47: 打開文件 檢查文件指針 讀取文件頭 檢查版本號(hào) 讀取MD2文件 將MD2數(shù)據(jù)轉(zhuǎn)換為模型結(jié)構(gòu) 西安石油大學(xué)畢業(yè)設(shè)計(jì)(論文) 26 圖 47 繪制插值點(diǎn)流程圖 3D 音效 一款 3D游戲,除了需要有游戲模型與系統(tǒng)引擎外,音效也是其組成的一部分,尤其是 3D音效。載入 MD2 文件的重要函數(shù)為: bool CMD2Loader::ImportMD2(t3DModel *pModel, char *strFileName, char *strTexture)。然后定義數(shù)組。然后把整個(gè)文件一股腦讀到一個(gè) buffer 緩存區(qū)去。 首先要從MD2 文件中得到文件頭信息。這就需要 在程序中 先定義一個(gè) 定時(shí)器, 然后在一個(gè) 時(shí)間 間隔時(shí)進(jìn)行 頁面刷新,讀入下一幀的數(shù)據(jù) 就是頁面 刷新時(shí) 所需要做 的 操作 , 讀取后 進(jìn)行顯示,從而實(shí)現(xiàn)連續(xù)的動(dòng)畫效果。在進(jìn)行三角形的繪制時(shí),要事先準(zhǔn)備好 存放紋理坐標(biāo)集合的緩存 、 存放三角形紋理在紋理集合中索引的緩存、存放點(diǎn)集合的緩存、存放三角形組成點(diǎn)在點(diǎn)集合中索引的緩存 ,準(zhǔn)備好緩存后,通過索引指向點(diǎn)集合中的紋理坐標(biāo)集合中的相應(yīng)位置,得到 數(shù)據(jù)后,在進(jìn)行三角形的繪制,進(jìn)行渲染。 利用以上這些信息,就可以編制相應(yīng)算法,定位到需要的地方。 // 存儲(chǔ) OPENGL 命令的地址偏移量 int offsetEnd。 //存儲(chǔ)幀的地址偏移量 int offsetTris。 // 紋理名稱的偏移量 (每個(gè) 64 字節(jié) ) int offsetST。 //三角形的的個(gè)數(shù) 頭文件 文件主體 包含 ID 號(hào),版本號(hào),和有關(guān)模型的各種數(shù)據(jù)的起始地址等 有關(guān)文件的各種數(shù)據(jù),如頂點(diǎn)數(shù)據(jù)、紋理數(shù)據(jù)、法向量數(shù)據(jù)等。 // OPENGL 命令的個(gè)數(shù) int numFrames。 // 三維空間中點(diǎn)的個(gè)數(shù) int numST。 //紋理的數(shù)目 int framesize。 //紋理的高度 int skinwidth。 //文件標(biāo)識(shí) . 必須是 IPD2 int version。 MD2 文件組成分為五部分:紋理坐標(biāo)集合、組成三角形的點(diǎn)的索引集合、文件頭、三維對象組成點(diǎn)集合、三角形的紋理坐標(biāo)的索引集合。在存儲(chǔ)結(jié)構(gòu)上, MD2 文件建模的原理是用三角形來描述復(fù)雜的物體,即所有的物體都是三角形組成的。這兩種模型都由兩部分組成,如圖 45: 西安石油大學(xué)畢業(yè)設(shè)計(jì)(論文) 24 圖 45 模型的組成 MD2 模型的紋理是隔離出來的,不包括在 MD2 文件內(nèi)部。 下面主要介紹了游戲用到的 MD2 模型: Quake2 模型格式由著名游戲公司 ID 公司自主設(shè)計(jì),廣泛應(yīng)用于 ID 公司開發(fā)的各種三維游戲中,其文件擴(kuò)展名為 MD2。3D 模型又分為靜態(tài)模型(如 3DS、 OBJ)和動(dòng)態(tài)模型(如 MD MD MS3D) 。因此我們常利用專門的建模工具(如 3D MAX、 Maya)來建立高逼真度的模型,再將模型導(dǎo)出為特定的格式,然后再將模型導(dǎo)入三維場景 中實(shí)現(xiàn)繪制與控制。 OpenGL 雖然提供了一些已經(jīng)生成的 3D 圓柱體、球體和立方體等實(shí)體模型的輔助函數(shù),但是這些函數(shù)都無法滿足建立復(fù)雜 3D 實(shí)體的需要,因此 OpenGL 的建模功能并不是十分強(qiáng)大。 場景中還有一種敵人 sod,與 Ogro 基本相同,只是更加智能一些。如果與地形發(fā)生了碰撞,則需要獲取其當(dāng)前位置相應(yīng)的高度值,并檢測此時(shí)的 x 與 z 分量,確保其不超過邊界。 modelState = MODEL_RUN。 //模型狀態(tài) velocity = CVector(, , )。 case AI_UNCARING: //敵人不恐懼狀態(tài) direction = float(rand() % 360)。 velocity = CVector(, , )。 case AI_SCARED: //敵人恐懼狀態(tài) direction = (dirToPlayer 90) + ((rand()%90)45)。 //求取敵人到玩家的矢量 ()。 // 敵人到玩家的矢量 = player。 //大于 100 不會(huì)恐懼 } 敵人 ogro 恐懼時(shí)的逃跑是由 COgroEnemy::OnPrepare()完成的 Float dirToPlayer。// 如果玩家靠的夠 西安石油大學(xué)畢業(yè)設(shè)計(jì)(論文) 22 進(jìn),敵人則會(huì)恐懼 if (distFromPlayer ) //距離小于 100 aiState = AI_SCARED。 CVector diff = playerposition position。角度范圍逃跑。當(dāng)處于AI_UNCARING 狀態(tài)時(shí),它有很大幾率是無所事事的。如果敵人不在乎玩家,那么它則會(huì)自由地亂跑,或者保持空閑狀態(tài)。敵人的狀態(tài)是 AIState_t 類來定義的: enum AIState_t { AI_UNCARING, // 敵人不會(huì)恐懼也不會(huì)關(guān)心玩家 AI_SCARED, // 敵人會(huì)恐懼并且逃避 AI_DEAD //敵人死亡 }。 在本次游戲中,設(shè)計(jì)了兩種敵人,一種普通類型敵人,另一種跑動(dòng)速度稍快,而且相對智能的 AI。對于本次設(shè)計(jì)的游戲來說,如果敵人一直站著不動(dòng),等玩家去消滅,游戲就顯得很單薄。將霧作為球、粒子或者霧紋理,在繪制其他物體時(shí),先計(jì)算觀察此 物體需要透過多少體積的霧,從而相應(yīng)地調(diào)整此物體的光照和顏色,以達(dá)到云霧的效果。如果在玩家視野邊緣處存在一些物體,雖然他們距離視點(diǎn)很遠(yuǎn),但是其 z 距離很小,那么,本應(yīng)被霧包圍的物體就變得非常清楚。這些參數(shù)的含義根據(jù) pname 參數(shù)的值而定,參數(shù)如表 41: 表 41 glFog()參數(shù)說明 參數(shù) 說明 GL_FOG_MODE 可以為 GL_LINEAR, GL_EXP 或 GL_EXP2,其用于指定三個(gè)霧方程中的哪一個(gè)來計(jì)算混合因子 GL_FOG_DENSITY 單一的值,指定用于三個(gè)霧方程的霧的密度,必須為正 GL_FOG_START 單一的值,指定用于三個(gè)霧方程的起始范圍值 GL_FOG_END 單一的值,指定用于三個(gè)霧方程的終止范圍值 GL_FOG_INDEX 使用 8bit 顏色時(shí),指定霧的顏色索引值 GL_FOG_COLOR 指定霧的顏色,是一個(gè)數(shù)組 盡管 OpenGL 霧很容易使用,并且在大多數(shù)情況下效果也非常不錯(cuò),但是并不完美。 glFogf(GLenum Pname, GLfloat *Params)。 glFogfv(GLenum Pname, GLfloat Param)。為了開啟云霧效果,我們首先要啟用它。所謂云霧效果,就是為了給玩家視野可見度,視野之外的物體將會(huì)被云霧遮擋,玩家只有行進(jìn)才能開拓新的視野,當(dāng)然已經(jīng)可見的物體,在超出視野范圍會(huì)再次被云霧遮蓋。 CExplosion 類西安石油大學(xué)畢業(yè)設(shè)計(jì)(論文) 20 將 CRocket 類中所指定的 explosionTex 作為紋理來繪制爆炸效果。 CExplosion 對象則 是用來生成爆炸效果的。// 爆炸紋理 CExplosion *explosion。 // 火箭的向前矢量 bool isExplosion。 float distanceTravel。程序中用 CRocket類 來表示火箭,這個(gè)類用來載入火箭的 MD2模型,繪制并進(jìn)行相關(guān)物理計(jì)算。僅需要通過兩次平面的前后判斷就可以確定空間的先后順序,算法威力可見一斑。如果一個(gè)人處于 C房間內(nèi),那么如何判斷空間的遮擋順序呢?從根結(jié)點(diǎn)開始,由于處于平面 1的 “ 后面 ” ,所以, BC空間應(yīng)該先于 A空間,然后,由于人處于分割平面 2 的 “ 前 ” 面,所以, C 空間應(yīng)該先于 B 空間。這是一個(gè)非常標(biāo)準(zhǔn)的二分法,西安石油大學(xué)畢業(yè)設(shè)計(jì)(論文) 19 僅按照 “ 前 ” 和 “ 后 ” 兩個(gè)邏輯上的概念來劃分空間。 BSP算法 BSP Trees英文全稱為 Binary Space Partioning trees,二維空間分割樹,簡稱為二叉樹。要得到包圍盒的尺寸,需要把包圍對象在頂點(diǎn)方向進(jìn)行投影操作,找出方向上的投影區(qū)間,計(jì)算出投影區(qū)間的尺寸,該尺寸就是包圍盒的尺寸。那么協(xié)方差矩陣元素 Cjk的計(jì)算如公式 式 44 包圍盒的中心位置 m 那么 OBB的中心位置 m 計(jì)算如公式 : 式 45 協(xié)方差矩陣元素 Cjk 其中,公式 qi=q— m,ri=ri— m和 pi=pi— m 都是 3*1向量。尺寸是計(jì)算位置和方向得到的,中心位置是用均值和協(xié)方差矩陣來計(jì)算的。 尋找最適合的方向,以及確定這個(gè)方向上 OBB 包圍盒的最小尺寸,是構(gòu)造 OBB 包圍盒的關(guān)鍵。這個(gè)特點(diǎn)使得 OBB可以根據(jù)碰撞對象外形的不同來盡可能得包圍對象。在 AABB 算法的基礎(chǔ)上,包圍球的球 心及半徑的計(jì)算滿足公式 : ( 43) 式 43 球心 m和半徑 R 西安石油大學(xué)畢業(yè)設(shè)計(jì)(論文) 18 OBB(Onented Bounding
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1