亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種基于視域剔除的復(fù)雜室內(nèi)場(chǎng)景快速繪制方法

文檔序號(hào):6469378閱讀:268來源:國知局

專利名稱::一種基于視域剔除的復(fù)雜室內(nèi)場(chǎng)景快速繪制方法
技術(shù)領(lǐng)域
:本發(fā)明涉及圖形處理和虛擬現(xiàn)實(shí),主要是一種場(chǎng)景圖形引擎快速繪制方法,特別是一種基于室內(nèi)場(chǎng)景圖結(jié)構(gòu)的圖形引擎快速繪制方法。
背景技術(shù)
:由于計(jì)算機(jī)繪制的場(chǎng)景日益復(fù)雜,為了達(dá)到實(shí)時(shí)的效果,對(duì)計(jì)算機(jī)軟硬件的要求只會(huì)越來越高,它要求采用先進(jìn)的繪制算法來對(duì)復(fù)雜的場(chǎng)景進(jìn)行規(guī)劃和管理,對(duì)場(chǎng)景管理算法進(jìn)行優(yōu)化,加快繪制場(chǎng)景的速度,通常圖形質(zhì)量與計(jì)算量是成正比的,計(jì)算量越大,圖形的質(zhì)量也就越好,然而考慮到虛擬現(xiàn)實(shí)中實(shí)時(shí)性的要求,所以不得不在這兩者中均衡考慮,在滿足視覺效果的同時(shí),盡量加快繪制的速度。目前用來加速場(chǎng)景繪制的主要技術(shù)有層次細(xì)節(jié)算法,基于圖像的繪制算法等快速繪制算法,層次細(xì)節(jié)算法的核心思想是在不影響畫面視覺效果的前題條件下,根據(jù)視點(diǎn)距離,逐步簡化場(chǎng)景表面細(xì)節(jié)來提高繪制的效率。但層次細(xì)節(jié)LOD轉(zhuǎn)換時(shí)的圖像跳躍比較大,是一種離散的,在離散/連續(xù)方面非常欠缺?;趫D像繪制算法利用二維圖像信息來表達(dá)和繪制虛擬場(chǎng)景,利用這種方法會(huì)有較好的真實(shí)感和實(shí)時(shí)性,因?yàn)樗鼇碜哉鎸?shí)的照片,具有真實(shí)感強(qiáng)的圖像,但是它的缺點(diǎn)是缺少交互性。對(duì)于一個(gè)虛擬現(xiàn)實(shí)系統(tǒng)來說,不僅有室外場(chǎng)景,還有相當(dāng)一部分的室內(nèi)場(chǎng)景,室內(nèi)場(chǎng)景通常都有一個(gè)特性——場(chǎng)景內(nèi)部模型相當(dāng)復(fù)雜,并且從觀測(cè)者的視點(diǎn)看去只能看到他所處環(huán)境內(nèi)的物體,除非在這個(gè)環(huán)境中有其它入口可以通往其它環(huán)境。由于室內(nèi)場(chǎng)景的復(fù)雜,運(yùn)用LOD肯定是不現(xiàn)實(shí)的,因?yàn)槎际墙嚯x的模型,而基于圖像的繪制的算法也不能從根本上解決加速繪制的要求,一般針對(duì)這樣的室內(nèi)環(huán)境都是運(yùn)用創(chuàng)建樹結(jié)構(gòu),但樹結(jié)構(gòu)是相當(dāng)?shù)托У?,因?yàn)橥ㄟ^入口觀測(cè)者只能看到相鄰環(huán)境中非常小的一部分物體。換句話說,樹結(jié)構(gòu)不能很好的處理既有高復(fù)雜度又有高阻光度的場(chǎng)景。這個(gè)問題常常被稱為"無效渲染",會(huì)花費(fèi)大量的時(shí)間去渲染最終被一堵墻擋住的相鄰房間中的物體。
發(fā)明內(nèi)容本發(fā)明的目的在于提供一種基于視域剔除的復(fù)雜室內(nèi)場(chǎng)景快速繪制方法,能大為提高在繪制室內(nèi)場(chǎng)景時(shí)的繪制速度,保證虛擬現(xiàn)實(shí)的實(shí)時(shí)性要求。為達(dá)到上述目的,本發(fā)明的構(gòu)思是克服現(xiàn)有圖形引擎快速繪制技術(shù),尤其是在繪制室內(nèi)場(chǎng)景時(shí)的速度不夠,提供了一種基于視域剔除的復(fù)雜室內(nèi)場(chǎng)景快速繪制方法,它考慮了室內(nèi)場(chǎng)景與室外場(chǎng)景的區(qū)別與特點(diǎn),大大提高了在繪制室內(nèi)場(chǎng)景時(shí)的繪制速度,保證了虛擬現(xiàn)實(shí)的實(shí)時(shí)性要求。根據(jù)上述發(fā)明構(gòu)思,本發(fā)明采用的技術(shù)方案是一種基于視域剔除的復(fù)雜室內(nèi)場(chǎng)景快速繪制方法,其特征在于首先將場(chǎng)景劃分成區(qū)域,用portal入口把相鄰的區(qū)域連接起來,再確定視點(diǎn)所在的位置,將該區(qū)域模塊所包含的所有幾何模塊與視錐體進(jìn)行相交檢測(cè),然后進(jìn)行視域剔除工作,實(shí)現(xiàn)復(fù)雜室內(nèi)場(chǎng)景的快速繪制;具體操作步驟如下(1)采用'凸'多邊形作為劃分區(qū)域的最小單位;(2)用portal入口把相鄰的區(qū)域連接起來;(3)確定視點(diǎn)所在的位置,將攝像機(jī)的空間坐標(biāo)與所有區(qū)域依次進(jìn)行相交判斷,由此確定視點(diǎn)處于哪個(gè)區(qū)域模塊中;(4)將該區(qū)域模塊所包含的所有幾何模塊與視錐體進(jìn)行相交檢測(cè),完成視域剔除工作;(5)計(jì)算可視范圍內(nèi)的所有Portal,按Portal大小和視點(diǎn)方向重新計(jì)算新的視錐體,并與該P(yáng)ortal相連的區(qū)域模塊內(nèi)利用計(jì)算的視錐體進(jìn)行新一輪的視域剔除;如此遞歸下去,直到所有的可視區(qū)域模塊都完成了視域剔除,如此獲得的所有幾何節(jié)點(diǎn)形成的序列就是需要進(jìn)行渲染的節(jié)點(diǎn)。所述的步驟(1)中的采用'凸'多邊形作為劃分區(qū)域中的最小單位中的'凸'表示在區(qū)域內(nèi)的任意兩點(diǎn)間畫一條線段,這條線段不會(huì)穿透該區(qū)域的任何一個(gè)多邊形,而閉合表示從區(qū)域內(nèi)發(fā)出一條光線,如果要讓光線射到區(qū)域外,則此光線必須要穿透某個(gè)區(qū)域的多邊形。所述的步驟(2)中的portal入口表示為兩個(gè)區(qū)域模塊相連接部分的位置和大小。所述的步驟(5)中的按Portal大小和視點(diǎn)方向重新計(jì)算新的視錐體,這里會(huì)出現(xiàn)兩種情況,Portal完全/部分處于原視錐體范圍內(nèi)部,如果完全處于原視錐體內(nèi)部,那么只要計(jì)算由Portal產(chǎn)生的視錐體為新的視錐體,如果部分處于原視錐體內(nèi)部,那么在內(nèi)部以Portal產(chǎn)生的視錐體為準(zhǔn),而超出原視錐體的部分還是按照原視錐體的邊界進(jìn)行計(jì)算所得。本發(fā)明有益的效果是采用Portal入口技術(shù)對(duì)復(fù)雜的室內(nèi)場(chǎng)景進(jìn)行管理,基于視域剔除,使得在模型復(fù)雜的場(chǎng)景內(nèi)無需渲染場(chǎng)景中的每個(gè)物體,這樣大大提高了渲染了效率,很好的設(shè)計(jì)了Portal入口,cell區(qū)域的數(shù)據(jù)結(jié)構(gòu)體,而避免了用樹結(jié)構(gòu)產(chǎn)生的"無效渲染"提高內(nèi)存利用率。圖l本發(fā)明的方法流程圖。圖2Portal模型結(jié)構(gòu)圖。圖3視錐體計(jì)算示意圖1。圖4視錐體計(jì)算示意圖2。圖5測(cè)試效果圖。具體實(shí)施例方式本發(fā)明的一個(gè)優(yōu)選實(shí)施例結(jié)合如下本復(fù)雜室內(nèi)場(chǎng)景快速繪制方法,共分五步第一步將整個(gè)場(chǎng)景劃分成n個(gè)區(qū)域如圖1所示,在入口技術(shù)的概念中整個(gè)場(chǎng)景被劃分n個(gè)區(qū)域(cell),每個(gè)區(qū)域都是一個(gè)閉合的凸多邊形,這里"凸"表示在區(qū)域內(nèi)的任意兩點(diǎn)間畫一條線段,這條線段不會(huì)穿透該區(qū)域的任何一個(gè)多邊形,而閉合表示從區(qū)域內(nèi)發(fā)出一條光線,如果要讓光線射到區(qū)域外,則此光線必須要穿透某個(gè)區(qū)域的多邊形.因此可以形象地把一個(gè)區(qū)域看成是一個(gè)房間,區(qū)域的多邊形構(gòu)成了房間的墻壁、天花板和地板等(如果要描述一個(gè)"凸"的房間,需要將這個(gè)房間劃分成若干個(gè)"凸"區(qū)域,然后用入口將它們連接起來)。兩個(gè)鄰近的區(qū)域通過入口連接。第二步cell區(qū)域結(jié)構(gòu)設(shè)計(jì)Cdl模塊的劃分是由美工前期確定的,劃分有兩個(gè)主要條件,一是模塊內(nèi)部不能有墻或者其他遮擋體形成較大范圍的遮擋,二是該模塊的形狀必須是凸多面體,而所有的幾何節(jié)點(diǎn)將以其所在位置和包圍盒信息對(duì)號(hào)入座至相應(yīng)的Cell模塊,兩個(gè)Cell模塊將通過窗或門結(jié)構(gòu)進(jìn)行連通,每個(gè)房間就是一個(gè)Cell模塊,而連接房間與房間之間的門(窗)就是Portal。在視域剔除前我們就假定所有當(dāng)前Cell模塊(視點(diǎn)處于的那個(gè)Cdl模塊)中的幾何節(jié)點(diǎn)都是可見的,而相鄰的Cell模塊中只用那些處于門窗可視范圍內(nèi)的幾何節(jié)點(diǎn)才可見,不相鄰的Cell模塊中的所有幾何節(jié)點(diǎn)均不可見。本發(fā)明中,設(shè)計(jì)的Cell數(shù)據(jù)結(jié)構(gòu)如下ClassCellwstringmName;TPortalListmPortals;TNodeListmNodes;TOBBListmBoxes;boolmlsVisualize;}其中mName是該模塊的名字,也就是引擎中的標(biāo)識(shí)號(hào),mPortals記錄了屬于這個(gè)模塊的所有Portal結(jié)構(gòu),mNodes記錄了位于模塊中的所有幾何節(jié)點(diǎn)的信息,mBoxes記錄的是組成這個(gè)Cell的所有OBB的序列,由于Cdl其實(shí)就是一個(gè)個(gè)房間,而房間不一定是方方正正的,所以有些情況下需要用多個(gè)OBB才能準(zhǔn)確的描述一個(gè)Cdl,mBoxes就是用來記錄這些OBB的。最后一個(gè)布爾變量mlsVisualize是用來記錄該Cell是否可見的。第三步Portal結(jié)構(gòu)設(shè)計(jì)Portal模型結(jié)構(gòu)如圖2所示,這里將Portal抽象成一個(gè)平面的長方形,所以在數(shù)據(jù)結(jié)構(gòu)中只要記錄其中心坐標(biāo),兩個(gè)軸役及軸向長度即可,通過這些參數(shù)我們可以計(jì)算出Portal四個(gè)頂點(diǎn)的坐標(biāo)值^二尸c-A0H0-^(1)B=Pc+A;030-(2)C=《+A;0H0+(3)=尸c一V^o+(4)式中Pc代表模型的中心坐標(biāo)mCenter,巧代表兩個(gè)方向向量,k代表方向向量上的長度。Portal是從屬于Cell模塊的,也就是說每個(gè)Portal有且僅有一個(gè)Cell模塊作為其父節(jié)點(diǎn)。由于一般來說墻面是有厚度的,所以對(duì)于一個(gè)連接通道而言在墻的正反面需要兩個(gè)Portal,而這兩個(gè)Portal模塊就各自需要一個(gè)指向?qū)Ψ降闹羔榿碚f明其連接情況,當(dāng)然還要考慮到有些時(shí)候門窗關(guān)閉的情況,我們需要有一個(gè)變量來說明Portal的狀態(tài)。主要數(shù)據(jù)結(jié)構(gòu)如下所示ClassPortalTVector3mCentersTVector3mAxes[2];TVector2mExtents;TCdl*mCell;TPortal*mAdjacent;boolmOpen;其中mCenter記錄空間位置的坐標(biāo),mAxes記錄兩個(gè)方向向量,利用一個(gè)二維向量mExtents記錄兩個(gè)方向向量上的長度值,mCdl記錄所屬Cell模塊的指針,mAdjacent記錄的是相連的Portal的指針,最后一個(gè)布爾向量記錄該P(yáng)ortal得閉合情況。第四步新視錐體生成算法新視錐體的生成分為兩種情況第一種情況是整個(gè)Portal完全處于原視錐體范圍內(nèi)部,在這種情況下,新的視錐體其實(shí)就是將原視錐體變窄后的模樣如圖3所示圖中O點(diǎn)代表的是視點(diǎn)(假設(shè)視點(diǎn)處于原點(diǎn)上),粗線條代表的是墻,墻上的缺口就是Portal,可以理解為門或者窗,ABCD表示的是原視錐體,但是對(duì)O點(diǎn)來說墻后的物體是不可見的,所以連接OF和OP分別交AD于E點(diǎn)和H點(diǎn),作FG平行于BC,這樣一個(gè)新的視錐體FGHE就生成了,F(xiàn)G為新視錐體的近平面,HE為新視錐體的遠(yuǎn)平面,三個(gè)方向軸不變。對(duì)于O點(diǎn)來說,處于墻另一側(cè)的物體只有處在這個(gè)新的視錐體內(nèi)才是可見的。新視錐體將通過如下步驟求得1.首先計(jì)算Portal的四個(gè)頂點(diǎn)到原視錐體近平面BC的最小距離,也就是求出各點(diǎn)指向B點(diǎn)的向量,然后求出這些向量與BC平面法向量的內(nèi)積,取出其中的最小值,由圖上可知最后求得的點(diǎn)是F點(diǎn),最短距離為IK線段所代表的長度,具體公式如下(以F點(diǎn)為例)D=(^3-涼)"(5)式中和^分別代表原點(diǎn)指向B點(diǎn)和F點(diǎn)的向量,巧代表平面法向量。2.由于視點(diǎn)未改變所以新視錐體的三個(gè)方向向量以及中心點(diǎn)坐標(biāo)與原視錐體完全相同,而新的近平面距離(mNear)就等于原近平面距離加上上一步求得的最小值(IK),遠(yuǎn)平面(mFar)距離值保持不變和原值相同。3.新視錐體的左值(mLeft)即圖中FI線段的長度,可以將OF向量內(nèi)積mAxesO的負(fù)向量求得。4.新視錐體的右值(mRight,圖中IG線段長度的)的求解相對(duì)復(fù)雜,首先需要求得F點(diǎn)和G點(diǎn)在mAxes2向量方向上的差值,然后求得OG在mAxes0向量方向上的投影,利用相互比例進(jìn)行求解,具體公式如下/G=(^S"0)x(/"a^)/(/"<9"^"2)(6)式中巧。和巧2分別代表mAxes0和mAxes2這兩條向量5.由于圖是俯視圖所以豎直向量無法在圖中表示,但利用同樣的方法可以求得上值(mTop)和下值(mBottom)。第二種情況是Portal部分處于原視錐體范圍內(nèi)部,在這種情況下,新的視錐體的形狀相當(dāng)于原視錐體的側(cè)邊半部中的一小部分,如圖4是一個(gè)新視錐體計(jì)算的示意圖此圖和第一種情況唯一的不同是墻面向左平移了一段距離,部分Portal位于視錐體外側(cè),像這樣的情況我們首先連接OP交AD于E,在P點(diǎn)做BC的平行線交AB于G,四邊形AGPE就是新的視錐體,且視點(diǎn)和三個(gè)方向向量和原視錐體保持一致。新視錐體通過如下方法可以計(jì)算獲得1.首先計(jì)算處在視錐體內(nèi)的Portal頂點(diǎn)到原視錐體近平面BC的距離,由圖上可知需要求解距離的點(diǎn)是P點(diǎn),最短距離為IP線段所代表的長度,具體公式如下(以P點(diǎn)為例)z)=(^i-5)"(7)式中和分別代表原點(diǎn)指向B點(diǎn)和P點(diǎn)的向量,巧代表平面法向量。2.這一步和第一種情況相同,新的近平面距離(mNear)就等于原近平面距離加上上一步求得的最小值(IP),遠(yuǎn)平面(mFar)距離值保持不變和原值相同。3.新視錐體的右值(mRight)即圖中KI線段長度的負(fù)值,可以將OP向量內(nèi)積mAxesO向量求得(求得直接為負(fù)值)。4.由圖上可知新視錐體與原視錐體共用一條左邊,所以他們的左值是相同的,即新視錐體mLeft就等于原視錐體mLeft。5.由于圖是俯視圖所以豎直向量無法在圖中表示,但利用同樣的方法可以求得上值(mTop)和下值(mBottom)。第五步根據(jù)生成的新視錐體渲染頂點(diǎn)利用計(jì)算的視錐體進(jìn)行視域剔除,直到所有的可視Cell模塊都完成了視域剔除,如此獲得的所有幾何節(jié)點(diǎn)形成的序列就是需要進(jìn)行渲染的節(jié)點(diǎn)。這時(shí)渲染的頂點(diǎn)比處理前頂點(diǎn)的個(gè)數(shù)要少了很多很多,因?yàn)橛泻芏囗旤c(diǎn)都由于Portal產(chǎn)生的視錐體進(jìn)行了視域剔除而被排除在渲染之外,從而大大提高渲染效率。實(shí)驗(yàn)結(jié)果本實(shí)驗(yàn)在vc.net的編譯環(huán)境下使用Direct3D渲染某室內(nèi)場(chǎng)景,按照上述方法場(chǎng)景管理。測(cè)試平臺(tái)如下表所示表5.1測(cè)試平臺(tái)<table>tableseeoriginaldocumentpage9</column></row><table>基于上述硬件平臺(tái)我們對(duì)于一個(gè)有110個(gè)節(jié)點(diǎn)、14個(gè)Cell模塊、20個(gè)Portal模塊的場(chǎng)景進(jìn)行測(cè)試。測(cè)試結(jié)果對(duì)比示于表5.2。表5.2不同情況下渲染速度的比較<table>tableseeoriginaldocumentpage9</column></row><table>從測(cè)試數(shù)據(jù)中不難發(fā)現(xiàn),遮擋率越高越能體現(xiàn)Portal算法的優(yōu)越性,如表第三行所示,在高遮擋的情況下,渲染幀數(shù)竟然有2.5倍的提升,使渲染效率有了質(zhì)的飛躍。測(cè)試效果圖如圖5所示。實(shí)驗(yàn)結(jié)果表明,本發(fā)明的一種基于視域剔除的復(fù)雜室內(nèi)場(chǎng)景快速繪制方法,克服現(xiàn)有圖形引擎繪制技術(shù)、尤其是在繪制室內(nèi)場(chǎng)景時(shí)的速度不夠的缺點(diǎn),提供了一種基于視域剔除的復(fù)雜室內(nèi)場(chǎng)景快速繪制方法,大大提高了在繪制室內(nèi)場(chǎng)景時(shí)的繪制速度,保證了虛擬現(xiàn)實(shí)的實(shí)時(shí)性要求。權(quán)利要求1.一種基于視域剔除的復(fù)雜室內(nèi)場(chǎng)景快速繪制方法,其特征在于首先將場(chǎng)景劃分成區(qū)域,同用Portal入口把相鄰的區(qū)域連接起來,再確定視點(diǎn)所在的位置,將該區(qū)域模塊所包含的所有幾何模塊與視錐體進(jìn)行相交檢測(cè),然后進(jìn)行視域剔除工作,實(shí)現(xiàn)復(fù)雜室內(nèi)場(chǎng)景的快速繪制;具體操作步驟如下a.采用‘凸’多邊形作為劃分區(qū)域的最小單位;b.用portal入口把相鄰的區(qū)域連接起來;c.確定視點(diǎn)所在的位置,將攝像機(jī)的空間坐標(biāo)與所有區(qū)域依次進(jìn)行相交判斷,由此確定視點(diǎn)處于哪個(gè)區(qū)域模塊中;d.將該區(qū)域模塊所包含的所有幾何模塊與視錐體進(jìn)行相交檢測(cè),完成視域剔除工作;e.計(jì)算可視范圍內(nèi)的所有Portal,按Portal大小和視點(diǎn)方向重新計(jì)算新的視錐體,并與該P(yáng)ortal相連的區(qū)域模塊內(nèi)利用計(jì)算的視錐體進(jìn)行新一輪的視域剔除;f.如此遞歸下去,直到所有的可視區(qū)域模塊都完成了視域剔除,如此獲得的所有幾何節(jié)點(diǎn)形成的序列就是需要進(jìn)行渲染的節(jié)點(diǎn)。2.根據(jù)權(quán)利要求1所述的基于視域剔除的復(fù)雜室內(nèi)場(chǎng)景快速繪制方法,其特征在于所述的步驟(1)中的采用'凸'多邊形作為劃分區(qū)域中的最小單位中的'凸'表示在區(qū)域內(nèi)的任意兩點(diǎn)間畫一條線段,這條線段不會(huì)穿透該區(qū)域的任何一個(gè)多邊形,而閉合表示從區(qū)域內(nèi)發(fā)出一條光線,如果要讓光線射到區(qū)域外,則此光線必須要穿透某個(gè)區(qū)域的多邊形。3.根據(jù)權(quán)利要求1所述的基于視域剔除的復(fù)雜室內(nèi)場(chǎng)景快速繪制方法,其特征在于所述的步驟(2)中的portal入口表示為兩個(gè)區(qū)域模塊相連接部分的位置和大小。4.根據(jù)權(quán)利要求1所述的基于視域剔除的復(fù)雜室內(nèi)場(chǎng)景快速繪制方法,其特征在于所述的步驟(5)中的按Portal大小和視點(diǎn)方向重新計(jì)算新的視錐體,這里會(huì)出現(xiàn)兩種情況,Portal完全/部分處于原視錐體范圍內(nèi)部,如果完全處于原視錐體內(nèi)部,那么只要計(jì)算由Portal產(chǎn)生的視錐體為新的視錐體,如果部分處于原視錐體內(nèi)部,那么在內(nèi)部以Portal產(chǎn)生的視錐體為準(zhǔn),而超出原視錐體的部分還是按照原視錐體的邊界進(jìn)行計(jì)算所得。全文摘要本發(fā)明涉及一種基于視域剔除的復(fù)雜室內(nèi)場(chǎng)景快速繪制方法。本方法首先把整個(gè)場(chǎng)景劃分成n個(gè)區(qū)域,用portal入口把相鄰的區(qū)域連接起來,再確定視點(diǎn)所在的位置,將該區(qū)域模塊所包含的所有幾何模塊與視錐體進(jìn)行相交檢測(cè),完成視域剔除工作,最后計(jì)算可視范圍內(nèi)的所有Portal,計(jì)算新視錐體,并進(jìn)行新一輪的視域剔除,如此遞歸下去,得到最終需要渲染的節(jié)點(diǎn)。實(shí)驗(yàn)結(jié)果表明,采用本發(fā)明的室內(nèi)場(chǎng)景管理方法,在室內(nèi)遮擋率高時(shí),能夠大大提高渲染效率。文檔編號(hào)G06T15/10GK101419721SQ20081020198公開日2009年4月29日申請(qǐng)日期2008年10月30日優(yōu)先權(quán)日2008年10月30日發(fā)明者歡丁,萬旺根,余小清,周俊瑋申請(qǐng)人:上海大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1