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

正文內(nèi)容

基于directx的第一人稱射擊游戲的制作畢業(yè)論文-資料下載頁(yè)

2025-06-22 13:44本頁(yè)面
  

【正文】 GP_ON_PLANE 2define UGP_CLIPPED 3define UGP_CULLED 4define UGP_VISIBLE 5ifndef PIdefine PI endif// 將度轉(zhuǎn)換成弧度define GET_RADIANS(degree) (float)(degree / * PI)endif,該頭文件保存所有與數(shù)學(xué)相關(guān)的include語(yǔ)句。包括對(duì)矢量、矩陣、面、多邊形等實(shí)現(xiàn)文件的引用。程序代碼如下:ifndef _UGP_MATH_LIBRARY_H_define _UGP_MATH_LIBRARY_H_include // 向量( 即矢量)相關(guān)include // 矩陣相關(guān)include // 四元組相關(guān)include // 物理學(xué)相關(guān)class CRay。 // 射線類class CPlane。 // 平面類class CPolygon。 // 多邊形類includeincludeincludeincludeendif如前所述,向量是3D游戲開發(fā)中涉及的最基本對(duì)象。3D向量保存在3D空間中指定位置的3個(gè)軸上。這些軸分別是x軸、y軸和z軸,分別代表空間中的寬度、高度和深度。這些值可對(duì)3D環(huán)境中的任意物體定位。3D向量是一個(gè)包含三個(gè)浮點(diǎn)數(shù)的結(jié)構(gòu)。定義和實(shí)現(xiàn)。在這兩個(gè)文件中除了定義了向量在VC++中結(jié)構(gòu)體的表示方法外,還包括向量長(zhǎng)度、點(diǎn)積、叉積、向量歸一化的計(jì)算,以及Direct3D向量的定義和各種數(shù)學(xué)運(yùn)算。為其它部分調(diào)用向量計(jì)算提供基礎(chǔ)。在計(jì)算機(jī)圖形學(xué)中,諸如矩陣這樣的對(duì)象可以控制物體的位置和旋轉(zhuǎn)。矩陣是浮點(diǎn)數(shù)的2D數(shù)組,可以對(duì)矢量進(jìn)行平移、旋轉(zhuǎn)、縮放和變換。從根本上講,矩陣是由行和列構(gòu)成的表。矩陣有多種形式,如334和44。這里矩陣的數(shù)分別代表2D數(shù)組包含的行數(shù)和列數(shù)。例如,44矩陣由16個(gè)元素組成,因?yàn)?4矩陣有4行,4列(44=16)。3D數(shù)學(xué)庫(kù)中有關(guān)矩陣的部分在引擎GameEngine項(xiàng)目中文件。在這兩個(gè)文件中除了定義了矩陣的在VC++中的表示方法外,還包括44矩陣的乘法、轉(zhuǎn)置和旋轉(zhuǎn)計(jì)算,以及Direct3D矩陣內(nèi)置對(duì)象和函數(shù)的初始化。旋轉(zhuǎn)是3D編程中最常用的操作之一。旋轉(zhuǎn)用于改變物體方向,或是繞著場(chǎng)景中某個(gè)軸或具體的點(diǎn)轉(zhuǎn)動(dòng),并且可以移動(dòng)骨骼動(dòng)畫中要用到的骨架點(diǎn)。正因?yàn)樾D(zhuǎn)如此重要,所以提高它們的精確度、速度和效率具有很重要的意義。例如,就骨骼動(dòng)畫而言,存儲(chǔ)效率和速度對(duì)系統(tǒng)也許是最重要的兩個(gè)要素,這是由系統(tǒng)的復(fù)雜性和存儲(chǔ)旋轉(zhuǎn)數(shù)據(jù)所需的內(nèi)存就決定的。曾有一段時(shí)間使用矩陣實(shí)現(xiàn)旋轉(zhuǎn),出現(xiàn)過(guò)問(wèn)題。這主要是因?yàn)槭褂镁仃嚂?huì)消耗大量?jī)?nèi)存和運(yùn)算時(shí)間,甚至在某些時(shí)候會(huì)產(chǎn)生Gimble lock問(wèn)題而無(wú)法準(zhǔn)確計(jì)算旋轉(zhuǎn)結(jié)果。而四元組是4D數(shù)學(xué)對(duì)象,并不是4D矢量,但能當(dāng)作4D矢量對(duì)待。它充分解決了使用矩陣轉(zhuǎn)換的缺點(diǎn)。用四元組計(jì)算會(huì)得到更平滑的計(jì)算結(jié)果,更準(zhǔn)確的旋轉(zhuǎn),而不會(huì)受到Gimble lock的影響。在這兩個(gè)文件中除了定義了四元組在VC++中結(jié)構(gòu)體的表示方法外,還包括四元組點(diǎn)積、長(zhǎng)度、乘法等的計(jì)算。 射線射線是包含原點(diǎn)(位置)和方向的結(jié)構(gòu)。射線主要在查看兩個(gè)平面是否發(fā)生碰撞,或相互之間可能會(huì)出現(xiàn)碰撞時(shí)做碰撞檢測(cè)使用。同樣,可以通過(guò)鼠標(biāo)使用射線來(lái)選擇對(duì)象。計(jì)算機(jī)圖形學(xué)中射線的另一種用途是實(shí)現(xiàn)一種名為射線跟蹤的渲染技術(shù)。簡(jiǎn)單地講,射線跟蹤是在場(chǎng)景中發(fā)射射線,并確定哪一根射線擊中了哪一個(gè)物體。義和實(shí)現(xiàn)。在這兩個(gè)文件中定義了射線在VC++中結(jié)構(gòu)體的表示方法。 平面平面是一個(gè)無(wú)限擴(kuò)展的區(qū)域。是3D場(chǎng)景中的核心部分,如果沒(méi)有平面,將無(wú)法進(jìn)行諸如幾何圖形選擇和碰撞檢測(cè)等操作。中定義和實(shí)現(xiàn)。在這兩個(gè)文件中定義了平面在VC++中結(jié)構(gòu)體的表示方法以及計(jì)算三角形法線,判斷平面與平面、平面與射線間是否相交,點(diǎn)與平面的關(guān)系,點(diǎn)與平面的距離等計(jì)算的實(shí)現(xiàn)。同時(shí),它們也實(shí)現(xiàn)了Direct3D平面的初始化操作。 三角形和多邊形Direct3D應(yīng)用程序中的一些圖元由諸如多邊形這樣的對(duì)象構(gòu)成。多邊形是封閉的平面圖形,邊界由一些線段組成。多邊形是一個(gè)面,由三個(gè)或更多的相連成形的點(diǎn)構(gòu)成。讀者可以見(jiàn)到,最常用的一類多邊形是三角形。三角形由三個(gè)互連在一起組成像2D金字塔形狀的不同點(diǎn)構(gòu)成。3D數(shù)學(xué)庫(kù)中有關(guān)三角形和多邊形的部分在引擎GameEngine項(xiàng)目中文件。在這兩個(gè)文件中定義了三角形和多邊形在VC++中結(jié)構(gòu)體的表示方法。 DirectX3D光照光照是一門為3D場(chǎng)景增加真實(shí)感的技術(shù),它以某種方式通過(guò)對(duì)物體分布不同的亮光和黑暗形成陰影而實(shí)現(xiàn)真實(shí)感。如同在現(xiàn)在許多游戲中見(jiàn)到的一樣,光照可以將場(chǎng)景帶入到一個(gè)全新的真實(shí)感層次。為場(chǎng)景增加光照會(huì)對(duì)已渲染的場(chǎng)景產(chǎn)生巨大的影響。左邊的場(chǎng)景沒(méi)有光照和陰影,中間的場(chǎng)景有光照而沒(méi)有陰影,右邊的場(chǎng)景兩者都有。圖 相同場(chǎng)景的三個(gè)不同光照版本光源是 3D 場(chǎng)景中發(fā)光的物體。這種所謂的光會(huì)導(dǎo)致陰影發(fā)生不同的變化,因而產(chǎn)生更具有真實(shí)感和更令人感興趣的場(chǎng)景。通過(guò)在場(chǎng)景中基于“光”信息讓物體從亮到黑逐漸發(fā)生變化,可以在圖形程序中創(chuàng)建非常真實(shí)的光照模擬。然后增加陰影,只是在看不見(jiàn)光源的表面上出現(xiàn)亮度變化,如黑色或是黑灰色。換句話說(shuō),有另一個(gè)表面介于光源和要增加陰影的表面之間。通常在計(jì)算機(jī)圖形學(xué)中有三類光源需要考慮,分別是點(diǎn)光源、聚光光源和方向性光源。(一)點(diǎn)光源點(diǎn)光源是一種在某個(gè)距離上向所有方向發(fā)光的光源。隨著光傳播一定的距離,它會(huì)損失一定的能量而且亮度也會(huì)逐漸降低。(二)聚光光源聚光光源在一定距離上散法能量(類似于點(diǎn)光源)。與點(diǎn)光源的差別在于聚光光源是通過(guò)一個(gè)圓錐將光發(fā)射到 3D 場(chǎng)景中,而不是在各個(gè)方向都發(fā)光。(三)方向性光源在計(jì)算機(jī)圖形學(xué)中,第三種光被稱為方向光。這些光像是從某個(gè)方向發(fā)生出來(lái)的,而沒(méi)有特定的光源(整理者:類似于太陽(yáng)光)。現(xiàn)實(shí)生活中,所有的光源都有一個(gè)產(chǎn)生光的源點(diǎn),但在計(jì)算機(jī)圖形學(xué)中產(chǎn)生一種沒(méi)有發(fā)光源點(diǎn)的光源也是可能的。在光照計(jì)算機(jī)過(guò)程中,通過(guò)幾個(gè)數(shù)學(xué)計(jì)算就可以實(shí)現(xiàn)該光源。這些光源看上去不是很真實(shí),但它們?cè)阡秩竞?jiǎn)單的場(chǎng)景和簡(jiǎn)單形狀的演示程序時(shí),卻足以滿足要求。 反射模型反射模型描述了光照射到某個(gè)表面時(shí),入射光在物體表面上的作用方式。當(dāng)一些光被反射回場(chǎng)景中時(shí),一部分光能被存儲(chǔ)。這些表面也就是所謂的材料。材料只是一些屬性,描述了材料被照射時(shí)做出的滿應(yīng)方式。更改這些屬性將得到不同的效果。計(jì)算機(jī)圖形學(xué)中有許多不同的反射模型,但最常用的模型分別是環(huán)境光反射模型、漫反射模型和鏡面反射模型。反射模型和光屬性一起確定了 3D 場(chǎng)景中物體的外觀。(一)環(huán)境光反射環(huán)境光反射描述的是場(chǎng)景中沒(méi)有方向的光,但是可以從各個(gè)地方都可以看到。因?yàn)閺拿總€(gè)表面將光反射回來(lái),這樣就很難辨認(rèn)光的原始位置。環(huán)境光試著模擬全局照明,這是場(chǎng)景中光從場(chǎng)景表面反射回來(lái)多次之后形成的光總量。當(dāng)光從表面上反射離開的時(shí)候,它沿著一定的方向反射。這些光線中的一部分進(jìn)入到觀察者的眼睛中,這樣就可以看到周圍的環(huán)境。(二)漫反射漫反射模型描述了光線從表面上在各個(gè)方向做相同反射的方式。這意味著如果看一個(gè)只由漫反射光照的物體,那么從各個(gè)角度看上去該物體都是相同的。漫反射是視覺(jué)獨(dú)立的,只有物體移動(dòng)或是光移動(dòng)時(shí),才會(huì)發(fā)生變化。當(dāng)光線照射在散射表面時(shí),它會(huì)在多個(gè)方向反射。物體越光滑,反射光線散射得越光滑。除了物體的陰影區(qū)域外,物體從各個(gè)角度看上去都一樣。(三)鏡面反射鏡面反射模型模擬了從光滑發(fā)光表面如鏡子、一塊金屬或一塊發(fā)光塑料等發(fā)射光線的情況。表面的鏡面屬性就是在光線中看到的大部分物體上發(fā)亮的光。如果移動(dòng)一個(gè)發(fā)光物體,就會(huì)注意到鏡面亮光區(qū)所發(fā)生的變化。這意味著鏡面反射取決于觀察物體的角度。所以漫反射光與視覺(jué)無(wú)關(guān),而鏡面反射光與視覺(jué)相關(guān)。 在 DirectX3D中創(chuàng)建光照與材質(zhì)模型為了在 Direct3D 中創(chuàng)建光源,必須創(chuàng)建一個(gè) D3DLIGHT 對(duì)象。為了方便起見(jiàn),下面程序設(shè)置了光照結(jié)構(gòu)。不必設(shè)置所有的屬性值,而屬性值的設(shè)置取決于創(chuàng)建的光源類型。typedef struct _D3DLIGHT9{ D3DLIGHTTYPE Type。 // 定義了所要?jiǎng)?chuàng)建的光源類型 D3DCOLORVALUE Diffuse。 // 該光源所發(fā)出的漫射光的顏色 D3DCOLORVALUE Specular。 // 該光源所發(fā)出的鏡面光的顏色 D3DCOLORVALUE Ambient。 // 該光源所發(fā)出的環(huán)境光的顏色 D3DVECTOR Position。 // 用于描述光源在世界坐標(biāo)系中位置的向量。 D3DVECTOR Direction。 // 一個(gè)描述光在世界坐標(biāo)系中傳播方向的向量。 float Range。 // 光線“消亡”前,所能達(dá)到的最大光程。 float Falloff。 // 僅用于聚光燈。定義了光強(qiáng)從內(nèi)錐形到外錐形的衰減方式 float Attenuation0。 // 該衰減變量定義了光強(qiáng)隨距離衰減的方式。僅用于點(diǎn)光源和聚光燈 float Attenuation1。 // 同 Attenuation0 float Attenuation2。 // 同 Attenuation0 float Theta。 // 僅用于聚光燈。指定了內(nèi)部錐形的圓錐角,單位為弧度 float Phi。 // 僅用于聚光燈。指定了外部錐形的圓錐角,單位為弧度}D3DLIGHT9。同樣,在 DirectX3D 中定義的材質(zhì)結(jié)構(gòu)體如下:typedef struct D3DMATERIAL9 { D3DCOLORVALUE Diffuse。 // 指定表面反射的漫反射光 D3DCOLORVALUE Ambient。 // 指定表面反射的環(huán)境光 D3DCOLORVALUE Specular。 // 指定表面反射的鏡面光 D3DCOLORVALUE Emissive。 // 表面本身自發(fā)光 float Power。 // 鏡面高光} D3DMATERIAL9, *LPD3DMATERIAL9。 引擎中增加對(duì)光照的支持、。創(chuàng)建燈源結(jié)構(gòu),該結(jié)構(gòu)用于創(chuàng)建Direct3D中的燈源對(duì)象。以某種方式實(shí)現(xiàn)該結(jié)構(gòu),這樣也可將其用于OpenGL或其他渲染系統(tǒng)。,因?yàn)樗赏瑫r(shí)用于為Direct3D和OpenGL創(chuàng)建材質(zhì)數(shù)據(jù)。材質(zhì)結(jié)構(gòu)包含了創(chuàng)建不同類型材質(zhì)所必須的全部信息。,以及啟動(dòng)光源函數(shù)。如下:// 設(shè)置并啟用光源void CD3DRenderer::SetLight(stLight *light, int index){ if(!light || !m_Device || index 0) return。 D3DLIGHT9 l。 = lightambientA。 = lightambientR。 = lightambientG。 = lightambientB。 = lightattenuation0。 = lightattenuation1。 = lightattenuation2。 = lightdiffuseA。 = lightdiffuseR。 = lightdiffuseG。 = lightdiffuseB。 = lightdirX。 = lightdirY。 = lightdirZ。 = lightfalloff。 = lightphi。 = lightposX。 = lightposY。 = lightposZ。 = lightrange。 = lightspecularA。 = lightspecularR。 = lightspecularG。 = lightspecularB。 = lighttheta。 if(lighttype == LIGHT_POINT) = D3DLIGHT_POINT。 else if (lighttype == LIGHT_SPOT) = D3DLIGHT_SPOT。 else = D3DLIGHT_DIRECTIONAL。 m_DeviceSetLight(index, amp。l)。 m_DeviceLightEnable(index, TRUE)。 DirectX3D紋理開發(fā)令人信任的背景和環(huán)境是3D游戲項(xiàng)目的核心所在。場(chǎng)景中的幾乎每個(gè)表面都會(huì)應(yīng)該人一種很強(qiáng)的視覺(jué)效果和觸模感。磚墻是由磚塊構(gòu)成的,木板箱是由許多塊木板構(gòu)成的,還有諸如此類等等。針對(duì)當(dāng)前這種辦法,產(chǎn)生的問(wèn)題就是為了獲取表面上更好的細(xì)節(jié)層次,就需要上千萬(wàn)的獨(dú)立的著色小三角形,這樣,創(chuàng)建游戲場(chǎng)景耗費(fèi)的時(shí)間就無(wú)法估計(jì),沒(méi)有什么經(jīng)濟(jì)價(jià)值,并且還要占用大量的處理器資源。解決上述問(wèn)題需要一種更好的增加細(xì)節(jié)層次的方法,并且不會(huì)增加不必要的代碼或是對(duì)象和場(chǎng)景的復(fù)雜度。“紋理映射”技術(shù)可
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1