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

正文內(nèi)容

基于ogre的三維場(chǎng)景渲染-資料下載頁(yè)

2025-05-07 20:34本頁(yè)面
  

【正文】 優(yōu)秀的場(chǎng)景組織體系;場(chǎng)景結(jié)點(diǎn)支持物體的附屬( attach),并帶動(dòng)附屬物體一起運(yùn)動(dòng),實(shí)現(xiàn)了類(lèi)似于關(guān)節(jié)的運(yùn)動(dòng)繼承體系。 粒子系統(tǒng)包括可以通過(guò)編寫(xiě)插件來(lái)擴(kuò)展的粒子發(fā)射器( emitter)和粒子特效影響器( affector)。通過(guò)腳本語(yǔ)言可以不用重新編譯就設(shè)置和更改粒子屬性。支持并自動(dòng)管理粒子池,從而提升粒子系統(tǒng)的性能。 支持天空盒、天空面和天空?qǐng)A頂,使用非常簡(jiǎn)單。 支持公告板,以實(shí)現(xiàn)特效。 自動(dòng)管理透明物體(系統(tǒng)自動(dòng)幫你設(shè)置渲染順序和深度緩沖) 資源管理和文檔加載( ZIP、 PK3)。 支持高效的插件體系結(jié)構(gòu),它允許你不重新編譯就擴(kuò)展引擎的功能。 運(yùn)用 39。Controllers39。你可以方便地改變一個(gè)數(shù)值。例如動(dòng)態(tài)改變一個(gè)帶防護(hù)罩的飛船的顏色值。 調(diào)試用的內(nèi)存管理器負(fù)責(zé)檢查內(nèi)存溢出。 下圖是 OGRE 的核心對(duì)象圖: 第三章 Ogre 渲染引擎 17 圖 31 OGRE 核心對(duì)象圖 3 .1 .2 Ogre 的渲染流程 在說(shuō)明 OGRE 的渲染流程之前需要先介紹 OGRE 內(nèi)部重要的幾個(gè)對(duì)象。 SceneManager:組織場(chǎng)景中的對(duì)象并將對(duì)象送入渲染系統(tǒng)中渲染。這個(gè)類(lèi)定義了場(chǎng)景管理器的基本功能,應(yīng)用客戶(hù)端根據(jù)自己需要重新實(shí)現(xiàn)場(chǎng)景的組織功能。這個(gè)對(duì)象掌控了所有的可渲染對(duì)象。 RenderSystem此抽象類(lèi)定義出 3D 渲染系統(tǒng)的基本功能,同時(shí)實(shí)現(xiàn)了一些通用的方法。各個(gè)不同的渲染平臺(tái)實(shí)現(xiàn)此類(lèi), OGRE 內(nèi)部交互由此抽象類(lèi)負(fù)責(zé),從而實(shí)現(xiàn)了渲染平臺(tái)無(wú)關(guān)性。應(yīng)用一般不會(huì)與此對(duì)象直接進(jìn)行交互,在 OGRE 內(nèi)部的其他重要對(duì)象, SceneManager 與它進(jìn)行交互,整個(gè)過(guò)程是透明的。 ViewPort:渲染目標(biāo)區(qū)域。視口是相機(jī)和渲染表面的 交集,并把這個(gè)結(jié)果放在整個(gè)渲染表面或者表面的一部分。每個(gè)視口都有一個(gè)相機(jī)作為源,一個(gè)目標(biāo)作為目標(biāo)。一個(gè)相機(jī)只有一個(gè)視口,但一個(gè)渲染目標(biāo)可以有多個(gè)視口。視口有 Z序?qū)傩?,如果渲染目?biāo)有多個(gè)視口,要對(duì)視口進(jìn)行 Z 排序. Camera:攝像機(jī)。需要注意的是它與 ViewPort和 SceneManager之間的關(guān)系。 RenderTarget:接受渲染操作結(jié)果的畫(huà)布。此抽象類(lèi)定義了基本的渲染目標(biāo)第三章 Ogre 渲染引擎 18 屬性和操作的功能。渲染目標(biāo)可以是窗口、屏幕、或者離屏表面,如:渲染到一張紋理圖等等。每個(gè)具體的渲染引擎需要實(shí)現(xiàn)自己的 RenderTarget,如:D3D9RenderWindow, D3D9RenderTexture 等。這個(gè)抽象類(lèi)包含了一個(gè)到多個(gè)的ViewPort 對(duì)象,在渲染時(shí)會(huì)迭代更新每個(gè) ViewPort。 Entity:定義了一個(gè)離散的、基于網(wǎng)格的可移動(dòng)對(duì)象的實(shí)例。 SceneNode:場(chǎng)景節(jié)點(diǎn)。這個(gè)類(lèi)從節(jié)點(diǎn)類(lèi)繼承過(guò)來(lái),除了自身是一個(gè)樹(shù)形結(jié)構(gòu)之外,它還可以附加多個(gè)可移動(dòng)對(duì)象 (MoveableObject),這樣它可以與世界中的所有可移動(dòng)對(duì)象 (比如實(shí)體對(duì)象 )關(guān)聯(lián)起來(lái)。 OGRE 通常將可渲染對(duì)象分為兩組,一是在世界中移動(dòng)的離散的極其相關(guān)的小對(duì)象。一種是大規(guī)模的雜亂的通常組成靜態(tài)場(chǎng)景的對(duì)象。 Mesh 和 SubMesh 是處理那些在離散的可移動(dòng)對(duì)象中使用的圖元的定義。實(shí)體在世界中是真正的基于這種圖元的對(duì)象的實(shí)例,因此對(duì)于一個(gè)汽車(chē)來(lái)說(shuō)它就是一個(gè)獨(dú)立的網(wǎng)格集合,但是在世界中可以有多個(gè)基于相同網(wǎng)格集合的實(shí)體,這些實(shí)體可以改變網(wǎng)格的外在表現(xiàn),例如通過(guò)改變材質(zhì)屬性 (這樣就可以在相同的圖元數(shù)據(jù)上用不同的紋理來(lái)?yè)碛胁挥玫男∑?chē) ),為了這個(gè)目標(biāo),因?yàn)榫W(wǎng)格被分成多個(gè)子網(wǎng)格,所以實(shí)體類(lèi)是一個(gè)分組的類(lèi) (與網(wǎng)格 類(lèi)很相似 )并且相關(guān)的獨(dú)立的個(gè)體改變的細(xì)節(jié)信息被保存在子實(shí)體類(lèi)中。這是 1: l 的關(guān)系,實(shí)體與子實(shí)體及其關(guān)聯(lián)的網(wǎng)格和子網(wǎng)格。實(shí)體和子實(shí)體都不會(huì)被直接的創(chuàng)建出來(lái),用場(chǎng)景的createEmity(傳遞一個(gè)模型的名字 )方法來(lái)創(chuàng)建它們。實(shí)體是被關(guān)聯(lián)他們的場(chǎng)景節(jié)點(diǎn)對(duì)象包含在場(chǎng)景中的,使用 attachEntity 方法關(guān)聯(lián)。 RenderQueue渲染隊(duì)列,此隊(duì)列中包含了按照材質(zhì)排序的可渲染對(duì)象,這樣會(huì)使渲染狀態(tài)的切換最少,它包含了一組 RenderQueueGroup 對(duì)象。 RenderPriorityGroup:渲染優(yōu)先級(jí)分 組,包含的所有的渲染對(duì)象都具有相同的優(yōu)先級(jí)。分出透明對(duì)象和非透明對(duì)象及其它渲染方式對(duì)象,使渲染狀態(tài)切換最小。 RenderQueueGroup:渲染隊(duì)列組,按照渲染的優(yōu)先級(jí)別排列的渲染對(duì)象列表。 Ogre引擎在啟動(dòng)時(shí)會(huì)根據(jù)配置創(chuàng)建一個(gè)合適的場(chǎng)景管理器 (Scene Manager),場(chǎng)景管理器 (Scene Manager)會(huì)自動(dòng)創(chuàng)建一個(gè)根節(jié)點(diǎn)對(duì)象 (Scene Node),有了這個(gè)根節(jié)點(diǎn)才可以在這個(gè)根節(jié)點(diǎn)下創(chuàng)建場(chǎng)景節(jié)點(diǎn)并將 3D 渲染實(shí)體附加到節(jié)點(diǎn)上。應(yīng)用程序可以在任意節(jié)點(diǎn)下創(chuàng)建子節(jié)點(diǎn),創(chuàng)建之后將 3D渲染實(shí)體附 加到此節(jié)點(diǎn)上。在場(chǎng)景節(jié)點(diǎn)內(nèi)部,保存著一個(gè)可移動(dòng)對(duì)象 (Moveable Object)列表,由于實(shí)體類(lèi)(Entity)是從可移動(dòng)對(duì)象類(lèi)繼承過(guò)來(lái),所以可以把實(shí)體附著在場(chǎng)景節(jié)點(diǎn)上,同時(shí),第三章 Ogre 渲染引擎 19 實(shí)體內(nèi)部包含一個(gè)子實(shí)體對(duì)象 (Sub Entity)的列表,而子實(shí)體類(lèi)是從可渲染對(duì)象繼承過(guò)來(lái),這樣在場(chǎng)景更新時(shí),首先調(diào)用場(chǎng)景節(jié)點(diǎn)類(lèi)的 addToRenderQueue 方法,這個(gè)方法內(nèi)部遍歷可移動(dòng)對(duì)象列表的每一項(xiàng),調(diào)用可移動(dòng)對(duì)象類(lèi)的updateRenderQueue 抽象方法,每個(gè)從可移動(dòng)對(duì)象類(lèi)繼承而來(lái)的類(lèi)都要實(shí)現(xiàn)此方法,比如在實(shí)體類(lèi)的的 updateRenderQueue 方 法內(nèi)部,遍歷子實(shí)體對(duì)象列表的每一項(xiàng) (子實(shí)體類(lèi)從可渲染類(lèi)繼承 ),將每個(gè)子實(shí)體送入渲染隊(duì)列中去,這樣就完成了渲染隊(duì)列的更新工作。以上說(shuō)明只是很粗略的描述,具體還有許多細(xì)節(jié)沒(méi)有說(shuō)明,比如進(jìn)行可視判斷,是否透明物體,是否為骨骼節(jié)點(diǎn)等等,但主要的流程大致如此。 3 .2 Ogre 的場(chǎng)景管理 Ogre 從核心設(shè)計(jì)之初就已經(jīng)將場(chǎng)景結(jié)構(gòu)(場(chǎng)景圖)和場(chǎng)景內(nèi)容完全分離,把場(chǎng)景圖的結(jié)構(gòu)和它所使用的數(shù)據(jù)節(jié)點(diǎn)作為平等的繼承體系來(lái)使用。這種靈活且強(qiáng)大的設(shè)計(jì)理念,使得多種場(chǎng)景圖的管理方式(比如 BSP、八叉樹(shù)或者 KDTree)可以靈活的替換,而不會(huì)影響具體的場(chǎng)景內(nèi)容的實(shí)現(xiàn)。 3 .2 .1 Ogre 場(chǎng)景圖系統(tǒng) 在 OGRE中,場(chǎng)景大致由 cameras(攝影機(jī) )、 lights(燈光 )、 materials(材質(zhì) ),entity(場(chǎng)景元素 )、 world geometry(靜態(tài)的場(chǎng)景 )、 particle system(粒子系統(tǒng) )等幾部分組成。為了便于管理提高優(yōu)化系統(tǒng),場(chǎng)景需要有序的組織,這是任何一個(gè) 3D引擎都必須解決的問(wèn)題。 下面先具體分析 Ogre中的場(chǎng)景圖系統(tǒng) [4],由于使用插件機(jī)制來(lái)實(shí)現(xiàn)場(chǎng)景管理功能, ROOT核心對(duì)象所產(chǎn)生并管理的 ScenceManager只是接口,它可以有很多具體的實(shí)現(xiàn),具體的實(shí)現(xiàn)由相應(yīng)的 Plugin。場(chǎng)景管理主要工作包括以下幾點(diǎn): 、不可移動(dòng)和可渲染物體的創(chuàng)建刪除。 。 場(chǎng)景對(duì)象創(chuàng)建: 場(chǎng)景中的所有對(duì)象,包括可移動(dòng)與不可移動(dòng)的: Camera、 Light、 SceneNode、Entity、 ManualObject、 BillboardChain、 RibbonTrail、 ParticleSystem、 BillboardSet、Animation、 AnimationState、 StaticGeometry、 MovableObject等 13種物體的 create、get、 has、 destroy方法都由場(chǎng)景管理器來(lái)創(chuàng)建。場(chǎng)景中的所有實(shí)體都由場(chǎng)景管理第三章 Ogre 渲染引擎 20 器來(lái)管理。任何通過(guò)場(chǎng)景管理器得到的東西,都必須由場(chǎng)景管理器來(lái)銷(xiāo)毀。用戶(hù)不能 delete通過(guò)由場(chǎng)景管理器得到的指針。 場(chǎng)景實(shí)體主要的相同點(diǎn)是它們與相機(jī)保持一個(gè)常量的距離。它們可以在場(chǎng)景中其它對(duì)象之前或是之后渲染。它們使用普通的 ogre material,因此紋理動(dòng)畫(huà)與其他紋理沒(méi)有什么不同。它們可以被場(chǎng)景管理器打開(kāi)或關(guān)閉,與相機(jī)的距離也可 以設(shè)置。 場(chǎng)景圖渲染過(guò)程: OGRE通過(guò) WinMain或 main調(diào)用 go,初始化 Root系統(tǒng),再通過(guò) Root調(diào)用startRendering進(jìn)行主循環(huán),然后調(diào)用 renderOneFrame ,通過(guò) RenderSystem的_updateAllRenderTargets方法,更新所有的 RenderTarget。 RenderTarget通過(guò) update方法更新與之關(guān)聯(lián)的 Viewport并產(chǎn)生 FPS統(tǒng)計(jì)信息。而 Viewport則調(diào)用與之關(guān)聯(lián)的Camera的 _renderScene方法進(jìn)行渲染, Camera將進(jìn)入 SceneManager的 renderScene成員函數(shù)中,在經(jīng)過(guò)計(jì)算后,把需要渲染的場(chǎng)景送給 RenderSystem去做真正的渲染,這時(shí)真正到達(dá)熟悉的 _breginFrame和 _endFrame。一直下去經(jīng)渲染隊(duì)列RenderQueue,RenderQueueGroup,RenderPriorityGroup,QueuedRenderable Collection再通過(guò)訪問(wèn)者到達(dá) QueuedRenderableVisitor的子類(lèi) SceneMgrQueued RenderableVisitor,最終又回到 SceneManager,由 SceneManager再到 RenderSystem完成整個(gè)渲染過(guò)程 [4]。 RenderQueueListener的作用就是在 SceneManager開(kāi)始渲染和結(jié)束渲染時(shí)改變 render state和別的操作,比如檢查本次 RenderQueue是否 skip,如果 skip就直接break本次 render。 可以看出 render queue是 Renderable的集合。其實(shí) Ogre整體的核心 —— 場(chǎng)景樹(shù)和渲染隊(duì)列都是對(duì) Renderable進(jìn)行分類(lèi)的上層組織,只是分類(lèi)的標(biāo)準(zhǔn)不同,場(chǎng)景樹(shù)主 要是從空間結(jié)構(gòu)對(duì) Renderable進(jìn)行分類(lèi),而渲染隊(duì)列則是對(duì) Renderable從material以及 blend上進(jìn)行分類(lèi),下面再對(duì) Ogre的渲染隊(duì)列做具體分析。 3 .2 .2 Ogre 場(chǎng)景管理器 對(duì)于程序的開(kāi)發(fā)者而言,場(chǎng)景管理器的直接用途一般是用來(lái)創(chuàng)建場(chǎng)景中所使用的對(duì)象,比如:燈光、攝影機(jī)、實(shí)體、粒子系統(tǒng)以及公告欄這些活動(dòng)物體,以及天空盒、靜態(tài)幾何體和世界地圖( World geometry)這些非活動(dòng)物體。對(duì)于場(chǎng)景中存在的物體,不論是否能被渲染,都會(huì)交給場(chǎng)景管理器進(jìn)行具體的管理工作。這樣做的 好處就是場(chǎng)景管理器可以根據(jù)自己的需要對(duì)物體進(jìn)行相應(yīng)的優(yōu)化處理(例如,可以在你場(chǎng)景管理器的具體實(shí)現(xiàn)里面對(duì)攝像機(jī)進(jìn)行有針對(duì)性的優(yōu)化工第三章 Ogre 渲染引擎 21 作)。注意,這里的“管理”指的是對(duì)場(chǎng)景中物體整個(gè)生命周期的管理:提供了創(chuàng)建、獲得、銷(xiāo)毀以及銷(xiāo)毀本類(lèi)型全部實(shí)例的方法。任何從場(chǎng)景管理器得到的對(duì)象必須由同一個(gè)場(chǎng)景管理器銷(xiāo)毀:換句話說(shuō),不可以直接“刪除”任何有場(chǎng)景管理器創(chuàng)建返回給你的指針?biāo)笇?duì)象。當(dāng)你需要釋放和清空整個(gè)場(chǎng)景的時(shí)候,必須讓相應(yīng)的場(chǎng)景管理器自己來(lái)做(也可以讓 Ogre的 Root對(duì)象在關(guān)閉的時(shí)候自動(dòng)得幫你調(diào)用相應(yīng)的方法)。 場(chǎng)景中新建立的節(jié)點(diǎn)必須作為子節(jié)點(diǎn)掛接在已經(jīng)存在的節(jié)點(diǎn)上面。這就意味著,第一個(gè)放入場(chǎng)景的節(jié)點(diǎn),必須掛到根節(jié)點(diǎn)上面,然后再不斷掛接擴(kuò)充,直至形成一個(gè)你所需要的場(chǎng)景樹(shù)狀結(jié)構(gòu)圖。圖中展示了經(jīng)過(guò)幾次掛接后場(chǎng)景圖的層次結(jié)構(gòu)。 圖 31:在場(chǎng)景圖中掛接 6個(gè)場(chǎng)景節(jié)點(diǎn)過(guò)程中的不同狀態(tài),從空?qǐng)鼍埃?a)一直到過(guò)程結(jié)束( f) 在通常的情況下, Ogre的場(chǎng)景管理器會(huì)負(fù)責(zé)處理以下事情: 在場(chǎng)景中創(chuàng)建和放置活動(dòng)物體、燈光以及攝像機(jī),并維護(hù)他們的在場(chǎng)景圖中的周游和變換。 載入和布置世界地圖( World geometry,與活動(dòng)實(shí)體不同,世界地圖是巨大且可以延伸的,通常情況下是不可移動(dòng)的,比如一個(gè)完整的 BSP地圖)。對(duì)場(chǎng)景查詢(xún)( Scene Queries)的支持,比如回答“在世界的某個(gè)原型空間內(nèi),都包含了那些物體”。 剔除不可見(jiàn)物體并且將可見(jiàn)物體放入渲染隊(duì)列。根據(jù)當(dāng)前和渲染物體的第三章 Ogre 渲染引擎 22 透視圖,對(duì)無(wú)方向的光源( Nondirectional Light)進(jìn)行組織和排序(按由近到遠(yuǎn))。 設(shè)置并且渲染場(chǎng)景中的陰影。渲染場(chǎng)景中的其他物體,如背景和天空盒 發(fā)送組織好的內(nèi)容到渲染系統(tǒng)執(zhí)行渲染 3 .2 .3 Ogre 材質(zhì) 簡(jiǎn)介 Ogre對(duì)具體的模型采用 material材質(zhì)文件決定其所有的渲染特性,文件資源組管理器初始化完畢后,就可以裝載材質(zhì)腳本, OGRE會(huì)自動(dòng)的在組相關(guān)的資源位置查找 .materal”擴(kuò)展名的文件,并對(duì)這些腳本進(jìn)行語(yǔ)法解析 [13]。 每一個(gè) material X代表是一個(gè)材質(zhì)單元。其中,每一個(gè) technique代表一個(gè)材質(zhì)渲染手法, pass是每個(gè)渲染通路模式, texture_unit則是一個(gè)紋理單元。 一個(gè)材
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1