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

正文內(nèi)容

3d游戲引擎中的室外大場(chǎng)景渲染技術(shù)研究與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)-資料下載頁(yè)

2025-06-19 13:53本頁(yè)面
  

【正文】 創(chuàng)建  對(duì)于緩沖池維護(hù)線程的生命周期有兩種方式。一種是當(dāng)繪制主線程發(fā)出更新緩沖池指令后得以創(chuàng)建,其生命周期在緩沖池維護(hù)工作(數(shù)據(jù)的讀取和刪除)后結(jié)束。第二種是在整個(gè)軟件初始化時(shí)期得到創(chuàng)建,其生命周期一直持續(xù)到整個(gè)軟件運(yùn)行結(jié)束。通過(guò)與主線程共享數(shù)據(jù)區(qū)域中的一個(gè)緩沖池維護(hù)指令標(biāo)記來(lái)決定是否進(jìn)行I/O操作。  (2)緩沖池維護(hù)線程與主線程的協(xié)作機(jī)制和通訊  出于效率的考慮,在線程間使用異步機(jī)制。主線程只在需要重新調(diào)整緩沖池的時(shí)候向緩沖維護(hù)線程發(fā)送消息,他在使用緩沖池資源的時(shí)候不需要采用鎖機(jī)制與維護(hù)線程互斥。通過(guò)為緩沖池中的每一個(gè)Tile建一個(gè)狀態(tài)標(biāo)記,主線程在查找數(shù)據(jù)的時(shí)候先看其對(duì)應(yīng)的標(biāo)記,如果標(biāo)記表明可以使用,才讓數(shù)據(jù)進(jìn)入渲染引擎。反之,則不把這個(gè)Tile調(diào)入渲染引擎。通過(guò)在主線程發(fā)出更新緩沖池指令和維護(hù)線程從文件系統(tǒng)讀完數(shù)據(jù)之間預(yù)留足夠的時(shí)間,可以保證在最大程度上讓主繪制線程取到想要的數(shù)據(jù)。這么做最大的好處是效率很高,繪制線程不需要任何等待時(shí)間。軟件初始化時(shí)在內(nèi)存中開(kāi)辟的一塊專用區(qū)域,兩個(gè)線程的數(shù)據(jù)都在這里得到共享。他們的消息傳遞也通過(guò)改變?cè)谶@塊區(qū)域中的一些狀態(tài)標(biāo)記來(lái)實(shí)現(xiàn)?! ≡诰彌_池中的每個(gè)Tile數(shù)據(jù)通過(guò)索引指針被繪制線程方便的使用?! ?3)何時(shí)更新緩沖池,更新哪些  當(dāng)角色在場(chǎng)景中移動(dòng)位置超出某個(gè)距離限制時(shí),讓主線程通知緩沖池維護(hù)線程開(kāi)始按主線程要求的最鄰近Tiles索引表來(lái)讀取新的Tiles文件,在池中刪除需要丟棄的Ti les空間(或許覆蓋更好)。關(guān)于何時(shí)更新,:  圖中的每個(gè)小格子代表一個(gè)Tile,也就是緩沖池維護(hù)線程要加載的最小單位。在本程序中每個(gè)Tile為256256大小。當(dāng)角色在點(diǎn)a位置時(shí),在他周圍相鄰的Tiles是以TilelOIilel4為邊長(zhǎng)的正方形。一共25個(gè)Tiles,他們就是此時(shí)緩沖池中擁有的Tiles。角色向b點(diǎn)移動(dòng),假設(shè)角色現(xiàn)在的坐標(biāo)是(X’,Y’),比較的基準(zhǔn)位置為a點(diǎn),其坐標(biāo)為(X,Y),那么  當(dāng)X’X=  或者Y’Y=Ti 時(shí)觸發(fā)緩沖區(qū)更新事件。  同時(shí)把基準(zhǔn)位置設(shè)為b點(diǎn)。通知緩沖池維護(hù)線程從池中剔除TilelO一Tilel8,從文件系統(tǒng)讀入Tilel_Tile9。角色走過(guò)(X’一X)或者(Y’一Y)這段路程的時(shí)間就是預(yù)留給池維護(hù)線程動(dòng)態(tài)讀取數(shù)據(jù)的時(shí)間,在本例中為256個(gè)高程圖單位,足夠了?! ≈档米⒁獾氖?,繪制主線程只從緩沖池中挑選最鄰近他四周的9個(gè)Tile進(jìn)入渲染引擎。如果在實(shí)際應(yīng)用中我們的硬盤讀取時(shí)間預(yù)留不是很足,讀取數(shù)據(jù)比較頻繁的話,可以通過(guò)增加進(jìn)入緩沖區(qū)的Tile個(gè)數(shù)來(lái)調(diào)節(jié)。比如設(shè)置進(jìn)入緩沖區(qū)的T兒e為36個(gè)?! ×硗?,也可通過(guò)設(shè)定Tile的優(yōu)先級(jí)來(lái)更合理的決定進(jìn)入和退出緩沖池的Tile。Tile的優(yōu)先級(jí)可以根據(jù)角色的運(yùn)動(dòng)方向來(lái)判定,比如人物向右移動(dòng),那右方Tile的優(yōu)先級(jí)顯然應(yīng)該比左方的高。’    本章節(jié)討論比較了ROAM、基于四叉樹(shù)的LOD、GeoMipMap幾種基于LOD思想的網(wǎng)格簡(jiǎn)化算法,提出一種優(yōu)化的GeoMipMap算法,并討論了其實(shí)現(xiàn)細(xì)節(jié)。另外,本章介紹了符合室外地形的空間管理算法一一基于四叉樹(shù)的空間管理。并討論了在其基礎(chǔ)上實(shí)現(xiàn)的視錐體裁剪,背面剔除算法和遮擋剔除算法。  此外,針對(duì)超大無(wú)縫地形的渲染,本文提出通過(guò)維護(hù)數(shù)據(jù)緩沖池來(lái)實(shí)現(xiàn)地圖數(shù)據(jù)動(dòng)態(tài)加載的技術(shù)。第四章 場(chǎng)景的真實(shí)感渲染技術(shù)  第三章討論了怎樣有效繪制地形的三角形面片,關(guān)于怎么在面片上表現(xiàn)真實(shí)的地表(草地、沙粒),以及怎么表現(xiàn)光照、天空、植物等,這一系列問(wèn)題涉及的就是場(chǎng)景的真實(shí)感渲染技術(shù)?!     ≡谟螒蛟O(shè)計(jì)中,由于客觀世界千變?nèi)f化、錯(cuò)綜復(fù)雜,要把真實(shí)世界的各種細(xì)微結(jié)構(gòu)直接用幾何模型表示出來(lái),不僅模型難以建立,而且計(jì)算量龐大,難以滿足實(shí)時(shí)顯示的需要,比如一張曲面可以用許多微小的多邊形(或曲面片)表示其表面細(xì)節(jié),假定每個(gè)微小多邊形具有近似相同的表面特征,要顯示這樣一個(gè)曲面,就必須對(duì)這些微小多邊形(或曲面片)進(jìn)行分別處理,這將需要大量的存儲(chǔ)空間和處理時(shí)間,因此在實(shí)際應(yīng)用中,為了獲得比較高的顯示速度,往往以犧牲圖形的真實(shí)感為代價(jià)。盡管這樣,顯示一幅比較復(fù)雜的圖像仍然需要很長(zhǎng)時(shí)間。于是,人們就想象是否可以用“貼墻紙的方法將反映物體表面的細(xì)節(jié)的圖案貼到物體表面,從而開(kāi)辟了一個(gè)新的研究領(lǐng)域一紋理映射(Texture Mappirig)。處理過(guò)程如下圖:  紋理映射的方式主要分為三種:  顏色紋理映射:最簡(jiǎn)單和最基本的應(yīng)用是將一幅花紋圖案映射到物體表面,采用與表面上點(diǎn)的位置有關(guān)的值(如:參數(shù)曲面上一點(diǎn)的參數(shù)值)來(lái)確定紋理坐標(biāo)并采樣包含圖案的紋理,采樣值用定義該點(diǎn)的顏色。通過(guò)此類方法在圖案和表面點(diǎn)之間建立的固定聯(lián)系,不會(huì)因視線的改變而改變。當(dāng)花紋或圖案繪上之后,表面仍光滑如故,這種紋理稱為顏色紋理,形如在物體表面繪制了一些花紋圖案?! ⊥拱技y理映射:根據(jù)粗糙表面的光反射原理,通過(guò)一個(gè)擾動(dòng)函數(shù)擾動(dòng)物體表面法向量,使光滑表面得到調(diào)制,并在光線下呈現(xiàn)出凸凹不平的形狀,這種紋理稱為凸凹紋理(或幾何紋理)。利用擾動(dòng)函數(shù)可以很好的模擬皮毛、頭發(fā)、衣服之類的物體?! ∵^(guò)程紋理映射:過(guò)程紋理映射屬于三維紋理,它就是將三維的紋理函數(shù)映射到三維物體上。也就是說(shuō)在物體的內(nèi)部也會(huì)受到紋理的影響。例如,木材和大理石的紋理,需要考慮每一個(gè)相鄰面的紋理映射,通常每個(gè)面分別進(jìn)行顏色紋理映射時(shí),由于面的邊界處紋理不連續(xù),往往難以表現(xiàn)出自然的紋理,這種場(chǎng)合定義三維的紋理函數(shù)進(jìn)行立體紋理映射是非常有效的。用過(guò)程紋理模擬物體表面細(xì)節(jié),能夠在非常復(fù)雜的曲面上表現(xiàn)連續(xù)的紋理,且紋理效果不受物體表面形狀的影響,可以很大程度的解決紋理走樣問(wèn)題?! ?OpenGL實(shí)現(xiàn)紋理映射的步驟  (1)指定紋理  在最簡(jiǎn)單的情況下,紋理是單個(gè)圖像。利用稱為MipMap的技術(shù),程序員可以指定同一紋理的多級(jí)分辨率圖像,在進(jìn)行紋理映射過(guò)程中,該技術(shù)可以按照景物表面在屏幕上所占區(qū)域分大小,自動(dòng)選擇合適分辨率的紋理圖像對(duì)景物表面進(jìn)行映射,以避免因紋理映射中的點(diǎn)采樣方式所導(dǎo)致的紋理走樣。另外,圖像的定義可以包括邊界值,以防止物體的紋理坐標(biāo)超出有效區(qū)域。邊界值允許程序員把多個(gè)紋理映射平滑的粘貼在一起,從而增加最大可用紋理的有效尺寸。相關(guān)函數(shù):glTexImage2D(),glTexGen()。  (2)紋理如何作用于每個(gè)像素點(diǎn)  OpenGL根據(jù)片元的顏色和紋理圖像數(shù)據(jù)中的顏色來(lái)計(jì)算最終的RGBA值。程序員可以選擇下面三種功能中的一種:,這種方法如同貼花一樣,紋理被粘貼在片元的表面上;,該技術(shù)對(duì)光照和紋理的綜合效果非常有用;。相關(guān)函數(shù):glTexParameter(),glTexEnv()?! ?3)激活紋理顏色  在繪制場(chǎng)景之前需激活紋理映射。相關(guān)函數(shù):glEnable(),glDisable()?! ?4)利用紋理坐標(biāo)和幾何坐標(biāo)繪制幾何場(chǎng)景  在粘貼紋理之前,必須說(shuō)明紋理相當(dāng)于片元是如何排列的。也就是說(shuō),必須指定場(chǎng)景中物體的紋理坐標(biāo)和幾何坐標(biāo)。對(duì)于二維紋理圖可指定其兩個(gè)方向上的紋理坐標(biāo)均為[,],而要粘貼紋理的物體坐標(biāo)可以是任意的。相關(guān)函數(shù):glTexCoord*()?! ?用多層紋理混合貼圖模擬融合性地表    對(duì)于小的地形,我們可以考慮在整個(gè)地形上貼一張紋理。比如6565的地形貼上一張128128的圖片。但是當(dāng)?shù)匦魏艽髸r(shí),我們的貼圖不可能很小。當(dāng)貼圖很小時(shí),地形會(huì)被拉伸產(chǎn)生失真;當(dāng)把貼圖選得太大,顯卡會(huì)承受不了。于是有人想到了,利用紋理貼圖坐標(biāo)(texture coordinate)的設(shè)定,我們可以將一張圖片一次次的重復(fù)貼至地形場(chǎng)景上,也就是所謂圖素紋理(tile texture)的方法;(mapping)至整個(gè)地形范圍,而是以每個(gè)128x128大小為一個(gè)單位,將圖文件完整貼上,如此反復(fù)進(jìn)行貼圖,就像是鋪地板磚一樣。這樣的方法,的確可以大幅減低貼圖失真的情形,可是如果還想進(jìn)一步實(shí)現(xiàn)更真實(shí)的地形場(chǎng)景貼圖,就會(huì)發(fā)現(xiàn)這個(gè)作法還是有不足之處。一個(gè)地形場(chǎng)景通常不會(huì)只擁有單獨(dú)一種樣式的地貌。舉例來(lái)說(shuō),可能依照地形高度的不同,在平地上會(huì)有草地,高度往上的山坡會(huì)有沙地,在山頂或陡峭之處可能會(huì)有巖地或雪地等等多種可能的組合。如果想達(dá)成這種形式的地形紋理貼圖,就不是簡(jiǎn)單的使用圖素紋理(tile texture)可以實(shí)現(xiàn)的了。這就需要紋理混合貼圖(Texture Blending)技術(shù)?! 蓪蛹y理混合原理公式:C=a*alpha+b*(1alpha)。    在很多游戲中,地形紋理又分為粗紋理和細(xì)節(jié)紋理。粗紋理是指表現(xiàn)地表大致圖像的紋理,比如一片草地,它的粗紋理就可以是一張綠色的圖片。而細(xì)節(jié)紋理顧名思義是指表現(xiàn)細(xì)節(jié)的紋理,在例子中,它就可以是一張表現(xiàn)草的細(xì)節(jié)、沙石細(xì)節(jié)的圖片。一張粗紋理一般映射得很廣,甚至映射到整個(gè)地形;而細(xì)節(jié)紋理一般是反復(fù)貼圖(鋪磚)。室外場(chǎng)景一般2到3張細(xì)節(jié)紋理足以表現(xiàn)出漂亮的結(jié)果。當(dāng)多張細(xì)節(jié)紋理混合時(shí),怎么體現(xiàn)不同紋理間的平滑過(guò)渡呢可以應(yīng)用紋理索引圖技術(shù)?! ≡诨叶葓D表示的紋理混合索引圖中每個(gè)像素對(duì)應(yīng)地形中的一塊區(qū)域(不能太大),白色像素表示那塊區(qū)域貼巖石紋理,黑色像素表示貼草地紋理,灰色像素即是兩種細(xì)節(jié)紋理的混合。比如灰度值是78,則在混合過(guò)程中巖石紋理的alpha=78/256100%。  同理,我們可以用彩色圖來(lái)表示更多細(xì)節(jié)紋理的混合索引。令索引貼圖的R分量代表沙灘的紋理,G分量代表草地,B分量代表巖石。如果索引貼圖上一個(gè)像素的值是(0,255,0),即綠色,則這個(gè)像素所對(duì)應(yīng)的地形區(qū)域的具體紋理就為草地。如果該像素顏色值是(127;127,0),即黃色,則該像素所對(duì)應(yīng)的地形區(qū)域的紋理為草地和沙灘的混合,看起來(lái)既有草,又有沙。這種方法的優(yōu)點(diǎn)是簡(jiǎn)單、靈活,方便美工人員設(shè)計(jì)地表的紋理?! ?紋理混合的OpenGL實(shí)現(xiàn)  在OpenGL中,紋理混合有三種方式來(lái)實(shí)現(xiàn):多通道多遍渲染,單通道多重渲染,用GLSL(GL Shading Language)實(shí)現(xiàn)多紋理混合?! 《嗤ǖ蓝啾殇秩尽 ∥覀儼训匦斡玫谝环N紋理畫出一次,然后再開(kāi)啟阿爾法混合(alphablending)的功能,用第二種紋理再畫出地形一次,這樣用不同紋理重復(fù)多次畫出地形。這種做法適應(yīng)配置低端的顯卡,但渲染速度會(huì)受很大影響。  單通道多重渲染  這種方法要用到兩個(gè)OpenGL擴(kuò)展指令(OpenGL Extensions),分別是GL_ARB_multitexture與GL_EXT_texture_env_bine。GL_ARB_multitexture可以讓我們一次控制二到多個(gè)紋理單元(texture unit)的操作。這種技術(shù)適合于配置中端的顯卡,速度也很快,但是支持的紋理個(gè)數(shù)有限。其步驟:  (1)地形初始化時(shí),由紋理混合索引圖確定每個(gè)地形頂點(diǎn)的所有紋理的映射坐標(biāo),紋理間的混合alpha值?! ?2)初始化多重紋理,載入紋理貼圖,設(shè)置相關(guān)參數(shù)?! ?3)渲染時(shí),用glMultiTexCoord2fARB設(shè)置頂點(diǎn)的紋理映射坐標(biāo),關(guān)鍵代碼如下:  用shader實(shí)現(xiàn)多紋理混合  所謂shader是基于顯卡的著色器。OpenGL和DirectX都先后發(fā)布了自己的著色器語(yǔ)言,如OpenGL的GLSL(GL Shader Language)。這是目前比較新的渲染技術(shù),這種方式編寫程序簡(jiǎn)單,速度很快,支持的紋理也很多,但顯卡必須是比較高階的支持著色器語(yǔ)言的。這種方法在下面章節(jié)光照貼圖中會(huì)有相關(guān)代碼。 室外場(chǎng)景的光影處理  要繪制逼真的場(chǎng)景必須做光照處理。沒(méi)有光照的三維物體模型與二維物體沒(méi)有任何差別,沒(méi)有一點(diǎn)立體感。只有具有光照的物體才是真正的三維物體。光照射到物體表面時(shí),可能被物體吸收、反射或透射。光的反射和透視部分進(jìn)入視覺(jué)系統(tǒng)使我們能看見(jiàn)物體。光的顏色是由其波長(zhǎng)決定,一束白光含有所有可見(jiàn)波長(zhǎng)的光。白光照射物體時(shí),只有所有可見(jiàn)光被等量吸收物體才會(huì)呈現(xiàn)灰色;如果被不等量吸收,物體會(huì)呈現(xiàn)其它的顏色。光的亮度由光強(qiáng)決定。從物體表面反射出來(lái)的光的強(qiáng)度取決于光源的位置、光強(qiáng)、物體材質(zhì)、物體表面位置、物體表面法線和視點(diǎn)的位置?!   」庹丈涞轿矬w表面時(shí),光線可能被吸收、反射和透射。被物體吸收的部分轉(zhuǎn)化為熱,反射、透射的光進(jìn)入人的視覺(jué)系統(tǒng),使我們能看見(jiàn)物體。為模擬這一現(xiàn)象,我們建立一些數(shù)學(xué)模型來(lái)替代復(fù)雜的物理模型,這些模型就稱為明暗效應(yīng)模型或者光照模型。  在真實(shí)感圖形學(xué)中,我們把僅處理光源直接照射物體表面的光照模型稱為局部光照模型,而與此相對(duì)應(yīng)的,可以處理在物體之間光照的相互作用的模型稱為整體光照模型?!  馪hong光照模型  Phong光照模型綜合反映了漫反射、鏡面反射和環(huán)境光對(duì)表面的作用1。他屬于局部光照模型,在游戲場(chǎng)景的實(shí)時(shí)渲染中經(jīng)常用到。其光照強(qiáng)度方程式如下:  式中,M表示對(duì)場(chǎng)景有貢獻(xiàn)的點(diǎn)光源的總個(gè)數(shù);I是光照表面點(diǎn)(x,y)處的光強(qiáng);Ia是入射環(huán)境光的光強(qiáng);Ini、fi(d)是第i個(gè)點(diǎn)光源發(fā)出的入射光光強(qiáng)和光源強(qiáng)度衰減因子;ka為景物表面對(duì)環(huán)境光的漫反射系數(shù);kd為景物表面的漫反射系數(shù);ks為景物表面的鏡面反射系數(shù);n稱為鏡面高光指數(shù),被用來(lái)模擬鏡面反射光在空間的會(huì)聚程度;Li為第i個(gè)點(diǎn)光源發(fā)射方向單位向量;N是點(diǎn)(x,y)處的表面單位法向量;Hi為將入射光反射到觀察者方向的理想鏡面的單位法向量Hi=(Li+V)/2,V為觀察者視線單位向量?! 」饩€跟蹤算法  光線跟蹤或稱光跡追蹤是計(jì)算機(jī)圖形學(xué)的核心算法之一n168。在算法中,光線從光源被拋射出來(lái),當(dāng)他們經(jīng)過(guò)物體表面的時(shí)候,對(duì)他們應(yīng)用種種符合物理光學(xué)定律的變換。最終,光線進(jìn)入虛擬的攝像機(jī)底片中,圖片被生成出來(lái)。由于該算法是全局光照模型,所以可以模擬生成十分復(fù)雜的圖片?! 」饩€跟蹤算法偽代碼:  輻射度算法  輻射度算法本質(zhì)是將光看作一種物理輻射,然后計(jì)算輻射的傳導(dǎo)就能獲得加之于每個(gè)對(duì)象物體上的光照強(qiáng)度,從而獲得正確的渲染結(jié)果。和其他渲染方法相比,輻射度算法更接近于光的自然傳播原理。輻射度算法解決了光在不同面之間反射的計(jì)算技術(shù),但不分布鏡面光
點(diǎn)擊復(fù)制文檔內(nèi)容
外語(yǔ)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1