本發(fā)明涉及大規(guī)模場(chǎng)景繪制技術(shù)領(lǐng)域,具體涉及一種流程工廠模型裁剪、繪制方法及裝置。
背景技術(shù):
流程工廠模型是指用來(lái)制造化學(xué)或物理制成品的反應(yīng)容器、管線及其支撐的集合,主要由設(shè)備、管線等基本構(gòu)件組成。其中,管線由管子和元件構(gòu)成,元件包括管件、閥門(mén)、法蘭、墊片等,各管子之間通過(guò)元件相連接?,F(xiàn)今,流程工廠行業(yè)的市場(chǎng)巨大,在國(guó)民經(jīng)濟(jì)中占據(jù)著舉足輕重的地位。而流程工廠圖形平臺(tái)是現(xiàn)代流程工廠從設(shè)計(jì)、施工到運(yùn)營(yíng)管理都不可缺少的支撐基礎(chǔ)。隨著經(jīng)濟(jì)的不斷發(fā)展,流程工廠行業(yè)產(chǎn)能的不斷提高,流程工廠管線的規(guī)模也在不斷增大。
現(xiàn)有的流程工廠模型的裁剪方法,主要依據(jù)對(duì)流程工廠模型的頂點(diǎn)所劃分的三角面片,對(duì)面片計(jì)算所占用的像素點(diǎn)數(shù)量,進(jìn)而判斷是否裁剪剔除?,F(xiàn)有的上述方法需要對(duì)各個(gè)點(diǎn)組成的三角面片逐一進(jìn)行遍歷、篩選,裁剪效率低,無(wú)法滿足在規(guī)定時(shí)間內(nèi)快速處理頂點(diǎn)面片規(guī)模上億的流程工廠模型的需求。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種流程工廠模型裁剪、繪制方法及裝置,用于解決現(xiàn)有的流程工廠模型裁剪方法效率低的問(wèn)題。
本發(fā)明實(shí)施例提供了一種流程工廠模型裁剪方法,包括:
加載流程工廠模型,創(chuàng)建與所述流程工廠模型對(duì)應(yīng)的多個(gè)構(gòu)件;
根據(jù)各個(gè)構(gòu)件的體素特征獲取所述各個(gè)構(gòu)件的最大占屏值和空間包圍盒;
根據(jù)所述各個(gè)構(gòu)件的最大占屏值將所述多個(gè)構(gòu)件劃分成第一構(gòu)件集合和第二構(gòu)件集合,所述第一構(gòu)件集合中的構(gòu)件的最大占屏值大于預(yù)設(shè)閾值,所述第二構(gòu)件集合中的構(gòu)件的最大占屏值小于預(yù)設(shè)閾值;
根據(jù)所述各個(gè)構(gòu)件的空間包圍盒分別求取所述第一構(gòu)件集合的第一最大空間包圍盒和所述第二構(gòu)件集合的第二空間最大包圍盒,根據(jù)所述第一最大空間包圍盒構(gòu)建與所述第一構(gòu)件集合對(duì)應(yīng)的第一空間八叉樹(shù),并根據(jù)所述第二最大空間包圍盒構(gòu)建與所述第二構(gòu)件集合對(duì)應(yīng)的第二空間八叉樹(shù);
對(duì)所述第一空間八叉樹(shù)和所述第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行視錐體裁剪測(cè)試,對(duì)通過(guò)視錐體裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)裁剪測(cè)試。
可選地,所述根據(jù)所述第一最大空間包圍盒構(gòu)建與所述第一構(gòu)件集合對(duì)應(yīng)的第一空間八叉樹(shù),并根據(jù)所述第二最大空間包圍盒構(gòu)建與所述第二構(gòu)件集合對(duì)應(yīng)的第二空間八叉樹(shù),包括:
根據(jù)所述第一最大空間包圍盒層次遞歸劃分所述第一構(gòu)件集合,構(gòu)建第一空間八叉樹(shù),遍歷所述第一構(gòu)件集合,將所述第一構(gòu)件集合中的各個(gè)構(gòu)件掛載至涵蓋當(dāng)前遍歷構(gòu)件的包圍盒中心位置的所述第一空間八叉樹(shù)的葉子節(jié)點(diǎn)下;
并根據(jù)所述第二最大空間包圍盒層次遞歸劃分所述第二構(gòu)件集合,構(gòu)建第二空間八叉樹(shù),遍歷所述第二構(gòu)件集合,將所述第二構(gòu)件集合中的各個(gè)構(gòu)件掛載至涵蓋當(dāng)前遍歷構(gòu)件的包圍盒中心位置的所述第二空間八叉樹(shù)的葉子節(jié)點(diǎn)下。
可選地,所述對(duì)通過(guò)視錐體裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)裁剪測(cè)試,包括:
獲取視點(diǎn)到通過(guò)視錐體裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)包圍盒中心的距離與預(yù)設(shè)比例因子的第一乘積;
比較所述第一乘積與對(duì)應(yīng)的葉子節(jié)點(diǎn)下所有構(gòu)件的最大占屏值的最大值的大小;
若所述對(duì)應(yīng)的葉子節(jié)點(diǎn)的所述第一乘積小于等于該葉子節(jié)點(diǎn)所有構(gòu)件的最大占屏值的最大值,則該葉子節(jié)點(diǎn)通過(guò)細(xì)節(jié)裁剪測(cè)試。
本發(fā)明實(shí)施例提供了一種流程工廠模型繪制方法,包括:
采用上述的方法對(duì)流程工廠模型進(jìn)行裁剪;
對(duì)通過(guò)裁剪測(cè)試的葉子節(jié)點(diǎn)進(jìn)行繪制。
可選地,所述對(duì)通過(guò)裁剪測(cè)試的葉子節(jié)點(diǎn)進(jìn)行繪制包括:
對(duì)通過(guò)視錐體裁剪測(cè)試的第一空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)層次lod繪制,并對(duì)通過(guò)視錐體裁剪測(cè)試和細(xì)節(jié)裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)層次lod繪制。
本發(fā)明實(shí)施例提供了一種流程工廠模型裁剪裝置,包括:
構(gòu)件創(chuàng)建單元,用于加載流程工廠模型,創(chuàng)建與所述流程工廠模型對(duì)應(yīng)的多個(gè)構(gòu)件;
構(gòu)件要素獲取單元,用于根據(jù)各個(gè)構(gòu)件的體素特征獲取所述各個(gè)構(gòu)件的最大占屏值和空間包圍盒;
構(gòu)件集合劃分單元,用于根據(jù)所述各個(gè)構(gòu)件的最大占屏值將所述多個(gè)構(gòu)件劃分成第一構(gòu)件集合和第二構(gòu)件集合,所述第一構(gòu)件集合中的構(gòu)件的最大占屏值大于預(yù)設(shè)閾值,所述第二構(gòu)件集合中的構(gòu)件的最大占屏值小于預(yù)設(shè)閾值;
空間八叉樹(shù)構(gòu)建單元,用于根據(jù)所述各個(gè)構(gòu)件的空間包圍盒分別求取所述第一構(gòu)件集合的第一最大空間包圍盒和所述第二構(gòu)件集合的第二空間最大包圍盒,根據(jù)所述第一最大空間包圍盒構(gòu)建與所述第一構(gòu)件集合對(duì)應(yīng)的第一空間八叉樹(shù),并根據(jù)所述第二最大空間包圍盒構(gòu)建與所述第二構(gòu)件集合對(duì)應(yīng)的第二空間八叉樹(shù);
裁剪測(cè)試單元,用于對(duì)所述第一空間八叉樹(shù)和所述第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行視錐體裁剪測(cè)試,對(duì)通過(guò)視錐體裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)裁剪測(cè)試。
可選地,所述空間八叉樹(shù)構(gòu)建單元進(jìn)一步用于:
根據(jù)所述第一最大空間包圍盒層次遞歸劃分所述第一構(gòu)件集合,構(gòu)建第一空間八叉樹(shù),遍歷所述第一構(gòu)件集合,將所述第一構(gòu)件集合中的各個(gè)構(gòu)件掛載至涵蓋當(dāng)前遍歷構(gòu)件的包圍盒中心位置的所述第一空間八叉樹(shù)的葉子節(jié)點(diǎn)下;
并根據(jù)所述第二最大空間包圍盒層次遞歸劃分所述第二構(gòu)件集合,構(gòu)建第二空間八叉樹(shù),遍歷所述第二構(gòu)件集合,將所述第二構(gòu)件集合中的各個(gè)構(gòu)件掛載至涵蓋當(dāng)前遍歷構(gòu)件的包圍盒中心位置的所述第二空間八叉樹(shù)的葉子節(jié)點(diǎn)下。
可選地,所述裁剪測(cè)試單元進(jìn)一步用于:
獲取視點(diǎn)到通過(guò)視錐體裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)包圍盒中心的距離與預(yù)設(shè)比例因子的第一乘積;
比較所述第一乘積與對(duì)應(yīng)的葉子節(jié)點(diǎn)下所有構(gòu)件的最大占屏值的最大值的大小;
若所述對(duì)應(yīng)的葉子節(jié)點(diǎn)的所述第一乘積小于等于該葉子節(jié)點(diǎn)所有構(gòu)件的最大占屏值的最大值,則該葉子節(jié)點(diǎn)通過(guò)細(xì)節(jié)裁剪測(cè)試。
本發(fā)明實(shí)施例提供了一種流程工廠模型繪制裝置,包括:
裁剪單元,用于采用上述的裝置對(duì)流程工廠模型進(jìn)行裁剪;
繪制單元,用于對(duì)通過(guò)裁剪測(cè)試的葉子節(jié)點(diǎn)進(jìn)行繪制。
可選地,所述繪制單元進(jìn)一步用于:
對(duì)通過(guò)視錐體裁剪測(cè)試的第一空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)層次lod繪制,并對(duì)通過(guò)視錐體裁剪測(cè)試和細(xì)節(jié)裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)層次lod繪制。
本發(fā)明實(shí)施例提供的流程工廠模型裁剪、繪制方法及裝置,加載流程工廠模型,創(chuàng)建與所述流程工廠模型對(duì)應(yīng)的多個(gè)構(gòu)件;將所述多個(gè)構(gòu)件劃分為第一構(gòu)件集合和第二構(gòu)件集合,構(gòu)建與第一構(gòu)件集合對(duì)應(yīng)的第一空間八叉樹(shù),構(gòu)建與第二構(gòu)件集合對(duì)應(yīng)的第二空間八叉樹(shù);對(duì)所述第一空間八叉樹(shù)和所述第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行視錐體裁剪測(cè)試,對(duì)通過(guò)視錐體裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)裁剪測(cè)試。本發(fā)明實(shí)施例利用構(gòu)件體素特征,可以按照最大占屏值,估計(jì)構(gòu)件在一定的視距下投影至屏幕的像素點(diǎn)數(shù)量;利用最大占屏值,可以快速的區(qū)分出構(gòu)件大小,完整繪制尺寸大的構(gòu)件,較為精確的繪制出整個(gè)模型的輪廓;對(duì)尺寸小的構(gòu)件進(jìn)行細(xì)節(jié)裁剪,避免現(xiàn)有技術(shù)中判斷計(jì)算像素的方式,保證在繪制一幀的過(guò)程中,最大化的減少所需遍歷與計(jì)算的數(shù)量,提高裁剪處理效率,從而提高渲染幀率。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明一個(gè)實(shí)施例的流程工廠模型裁剪方法的流程示意圖;
圖2是本發(fā)明一個(gè)實(shí)施例的部分體素的形狀圖;
圖3是本發(fā)明一個(gè)實(shí)施例的場(chǎng)景樹(shù)的原理圖;
圖4是本發(fā)明一個(gè)實(shí)施例流程工廠模型裁剪方法的原理圖;
圖5是本發(fā)明一個(gè)實(shí)施例的視錐體的原理圖;
圖6是本發(fā)明一個(gè)實(shí)施例的流程工廠模型繪制方法的流程示意圖;
圖7是本發(fā)明一個(gè)實(shí)施例的流程工廠模型裁剪裝置的結(jié)構(gòu)示意圖;
圖8是本發(fā)明一個(gè)實(shí)施例的流程工廠模型繪制裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整的描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
需要說(shuō)明的是,本發(fā)明實(shí)施例提及的構(gòu)件是構(gòu)成流程工廠模型的對(duì)象集合。管件,法蘭,閥門(mén),螺栓、螺母等各種管道器材,以及泵,風(fēng)機(jī),鼓風(fēng)機(jī),壓縮機(jī),真空設(shè)備,壓力容器,蒸汽透平,塔,儲(chǔ)罐,換熱器,加熱爐等各種工藝設(shè)備都可以統(tǒng)稱為構(gòu)件。組成流程工廠模型構(gòu)件的體素,主要包括網(wǎng)格面體素,面片體素,多邊形體素以及基本體素(如圖2所示)。其中基本體素包括圓柱、斜截圓柱、多棱柱、偏心圓臺(tái)、同心圓臺(tái)、天圓地方、矩形斷面圓臺(tái)、長(zhǎng)方體、圓形斷面圓環(huán)、矩形斷面圓環(huán)、球、直角楔形體、馬鞍形、橢球封頭、圓錐體等。所提及的構(gòu)件的體素參數(shù)信息,以圓柱為例,即上頂面圓心,下底面圓心,半徑,以及顏色。
圖1是本發(fā)明一個(gè)實(shí)施例的流程工廠模型裁剪方法的流程示意圖。如圖1所示,該實(shí)施例的方法包括:
s1:加載流程工廠模型,創(chuàng)建與所述流程工廠模型對(duì)應(yīng)的多個(gè)構(gòu)件;
需要說(shuō)明的是,本發(fā)明實(shí)施例讀取對(duì)應(yīng)的構(gòu)件的體素參數(shù)信息,創(chuàng)建多個(gè)構(gòu)件。在實(shí)際應(yīng)用中,根據(jù)構(gòu)件體素參數(shù)信息創(chuàng)建頂點(diǎn)數(shù)組,法線數(shù)組以及顏色數(shù)組;構(gòu)件在圖形引擎中亦即渲染節(jié)點(diǎn),其主要保存頂點(diǎn)數(shù)組、法線數(shù)組以及顏色數(shù)組等信息以供繪制時(shí)渲染。
s2:根據(jù)各個(gè)構(gòu)件的體素特征獲取所述各個(gè)構(gòu)件的最大占屏值和空間包圍盒;
需要說(shuō)明的是,構(gòu)件的體素特征,亦即18種基本體素的幾何特征。以圓柱為例,其幾何特征包括通過(guò)給定上頂面圓心、下底面圓心求出的高,以及直徑。所述的最大占屏值,用于抽象表示構(gòu)件在空間上的大小。繼續(xù)以圓柱為例,其在空間上的尺度有直徑和高,選取直徑作為最大占屏值來(lái)表示其在空間的占用大小??衫斫獾氖?,本發(fā)明實(shí)施例不采用高作為最大占屏值的主要因素是可能存在細(xì)長(zhǎng)的圓柱,在圖形渲染的過(guò)程中,如果視點(diǎn)距離對(duì)象很遠(yuǎn),細(xì)長(zhǎng)的圓柱從人眼的直觀角度上來(lái)看是傾向于看不見(jiàn)的。
需要說(shuō)明的是,最大占屏值,即是一種近似衡量構(gòu)件在空間大小的參數(shù);構(gòu)件空間包圍盒,則是通過(guò)剖分體素得到的頂點(diǎn)數(shù)組,通過(guò)不斷比較頂點(diǎn)獲取[(xmin,ymin,zmin),(xmax,ymax,zmax)]來(lái)表示其空間軸對(duì)齊包圍盒。
對(duì)各個(gè)體素的最大占屏值的求取規(guī)則,如表1所示:
表1體素的最大占屏值的求取規(guī)則
本發(fā)明實(shí)施例的各個(gè)構(gòu)件的最大占屏值的獲取步驟如下:
s211、從構(gòu)件集合中循環(huán)取出構(gòu)件;
s212、取出構(gòu)件的所有體素,對(duì)每個(gè)體素按照相應(yīng)的最大占屏值求取規(guī)則進(jìn)行求取該體素的最大占屏值;
s213、選取所有體素的最大占屏值的最大值作為該構(gòu)件的最大占屏值pi。
本發(fā)明實(shí)施例的各個(gè)構(gòu)件的空間包圍盒的獲取步驟如下:
s221、從構(gòu)件集合中循環(huán)取出構(gòu)件;
s222、獲取構(gòu)件的頂點(diǎn)數(shù)組verarray;
s223、初始化該構(gòu)件的空間包圍盒
(xmin,ymin,zmin)=(maxval,maxval,maxval),maxval表示計(jì)算可取的最大值,
(xmax,ymax,zmax)=(minval,minval,minval),minval表示計(jì)算機(jī)可取的最小值;
s224、取出verarray的頂點(diǎn)v=(x,y,z),不斷計(jì)算
xmin=min(x,xmin),
ymin=min(y,ymin),
zmin=min(z,zmin),
xmax=max(x,xmax),
ymax=max(y,ymax),
zmax=max(z,zmax),
最終獲取[(xmin,ymin,zmin),(xmax,ymax,zmax)]來(lái)表示其空間軸對(duì)齊包圍盒。
s3:根據(jù)所述各個(gè)構(gòu)件的最大占屏值將所述多個(gè)構(gòu)件劃分成第一構(gòu)件集合和第二構(gòu)件集合,所述第一構(gòu)件集合中的構(gòu)件的最大占屏值大于預(yù)設(shè)閾值,所述第二構(gòu)件集合中的構(gòu)件的最大占屏值小于預(yù)設(shè)閾值;
具體地,本發(fā)明實(shí)施例將多個(gè)構(gòu)件劃分成第一構(gòu)件集合l和第二構(gòu)件集合s的過(guò)程如下:
s31、對(duì)所有構(gòu)件的最大占屏值,按照從大到小排序;
s32、確定劃分閾值x%,選取最大占屏值集合中第x%的最大占屏值p確定為劃分參照;
s33、將構(gòu)件集合中的所有構(gòu)件的最大占屏值,依次與劃分參照p比較,小于則將構(gòu)件加入構(gòu)件集合s,否則加入構(gòu)件集合l。
在實(shí)際應(yīng)用中,劃分閾值可以為10%,也可以根據(jù)需要設(shè)定其他的劃分閾值,本發(fā)明對(duì)此不作限制。
s4:根據(jù)所述各個(gè)構(gòu)件的空間包圍盒分別求取所述第一構(gòu)件集合的第一最大空間包圍盒和所述第二構(gòu)件集合的第二空間最大包圍盒,根據(jù)所述第一最大空間包圍盒構(gòu)建與所述第一構(gòu)件集合對(duì)應(yīng)的第一空間八叉樹(shù),并根據(jù)所述第二最大空間包圍盒構(gòu)建與所述第二構(gòu)件集合對(duì)應(yīng)的第二空間八叉樹(shù);
需要說(shuō)明的是,本發(fā)明實(shí)施例對(duì)構(gòu)建第一空間八叉樹(shù)和第二空間八叉樹(shù)的順序不作限制。
s5:對(duì)所述第一空間八叉樹(shù)和所述第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行視錐體裁剪測(cè)試,對(duì)通過(guò)視錐體裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)裁剪測(cè)試;
需要說(shuō)明的是,視錐體是指場(chǎng)景中攝像機(jī)的可見(jiàn)的一個(gè)錐體范圍由上、下、左、右、近、遠(yuǎn),共6個(gè)面組成。在視錐體內(nèi)的景物可見(jiàn),反之則不可見(jiàn)。本發(fā)明實(shí)施例直接判斷葉子節(jié)點(diǎn)的空間包圍盒是否在視錐體內(nèi),若是,則通過(guò)視錐體裁剪測(cè)試,否則未通過(guò)視錐體裁剪測(cè)試,直接將該葉子節(jié)點(diǎn)剔除不繪制。
在實(shí)際應(yīng)用中,本發(fā)明實(shí)施例充分利用流程工廠模型的體素特征,在圖形平臺(tái)繪制一幀的時(shí)間內(nèi),快速計(jì)算出構(gòu)件投影至屏幕中所占像素點(diǎn)的數(shù)量并進(jìn)行相應(yīng)的裁剪,同時(shí)精確繪制屏幕像素點(diǎn)占據(jù)多的構(gòu)件,是保證在交互過(guò)程中能夠最優(yōu)的顯示出流程工廠模型的輪廓且達(dá)到提升幀率的重要手段。
本發(fā)明實(shí)施例提供的流程工廠模型裁剪方法,利用構(gòu)件體素特征,可以按照最大占屏值,估計(jì)構(gòu)件在一定的視距下投影至屏幕的像素點(diǎn)數(shù)量;利用最大占屏值,可以快速的區(qū)分出構(gòu)件大小,完整繪制尺寸大的構(gòu)件,較為精確的繪制出整個(gè)模型的輪廓;對(duì)尺寸小的構(gòu)件進(jìn)行細(xì)節(jié)裁剪,避免現(xiàn)有技術(shù)中判斷計(jì)算像素的方式,保證在繪制一幀的過(guò)程中,最大化的減少所需遍歷與計(jì)算的數(shù)量,提高裁剪處理效率,從而提高渲染幀率。
在本發(fā)明實(shí)施例一種可選的實(shí)施方式中,所述根據(jù)所述第一最大空間包圍盒構(gòu)建與所述第一構(gòu)件集合對(duì)應(yīng)的第一空間八叉樹(shù),并根據(jù)所述第二最大空間包圍盒構(gòu)建與所述第二構(gòu)件集合對(duì)應(yīng)的第二空間八叉樹(shù),包括:
根據(jù)所述第一最大空間包圍盒層次遞歸劃分所述第一構(gòu)件集合,構(gòu)建第一空間八叉樹(shù),遍歷所述第一構(gòu)件集合,將所述第一構(gòu)件集合中的各個(gè)構(gòu)件掛載至涵蓋當(dāng)前遍歷構(gòu)件的包圍盒中心位置的所述第一空間八叉樹(shù)的葉子節(jié)點(diǎn)下;
并根據(jù)所述第二最大空間包圍盒層次遞歸劃分所述第二構(gòu)件集合,構(gòu)建第二空間八叉樹(shù),遍歷所述第二構(gòu)件集合,將所述第二構(gòu)件集合中的各個(gè)構(gòu)件掛載至涵蓋當(dāng)前遍歷構(gòu)件的包圍盒中心位置的所述第二空間八叉樹(shù)的葉子節(jié)點(diǎn)下。
需要說(shuō)明的是,第一構(gòu)件集合l和第二構(gòu)件集合s的最大空間包圍盒的獲取步驟如下(如圖4所示):
s411、對(duì)第一構(gòu)件集合l中的所有構(gòu)件,根據(jù)頂點(diǎn)數(shù)組,求取最大空間軸對(duì)齊包圍盒aabbboxl[(xmin,ymin,zmin),(xmax,ymax,zmax)];
s412、對(duì)第二構(gòu)件集合s中的所有構(gòu)件,根據(jù)頂點(diǎn)數(shù)組,求取最大空間軸對(duì)齊包圍盒aabbboxs[(xmin,ymin,zmin),(xmax,ymax,zmax)]。
具體地,構(gòu)建第一空間八叉樹(shù)octreel和第二空間八叉樹(shù)octrees的步驟如下:
s421、對(duì)第一構(gòu)件集合l,設(shè)定八叉樹(shù)深度hl,按照aabbboxl依次層次遞歸劃分,得到第一空間八叉樹(shù)octreel;
s422、對(duì)第二構(gòu)件集合s,設(shè)定八叉樹(shù)深度hs,按照aabbboxs依次層次遞歸劃分,得到第二空間八叉樹(shù)octrees;
s423、將第一空間八叉樹(shù)octreel和第二空間八叉樹(shù)octrees的根節(jié)點(diǎn)掛載場(chǎng)景樹(shù)根節(jié)點(diǎn)下。
需要說(shuō)明的是,此時(shí)生成的場(chǎng)景樹(shù)如圖3所示,場(chǎng)景樹(shù)根節(jié)點(diǎn)為流程工廠模型節(jié)點(diǎn),其左右子樹(shù)分別為第一空間八叉樹(shù)octrees和第二空間八叉樹(shù)octreel,第一空間八叉樹(shù)octrees和第二空間八叉樹(shù)octreel的葉子節(jié)點(diǎn)最終掛載在構(gòu)件包圍盒中心在相應(yīng)空間區(qū)域的構(gòu)件節(jié)點(diǎn)。
具體地,本發(fā)明實(shí)施例將構(gòu)件掛載在相應(yīng)的空間八叉樹(shù)的步驟如下:
s431、對(duì)第一構(gòu)件集合l,遍歷每個(gè)構(gòu)件,取出對(duì)應(yīng)的包圍盒中心,將其掛載至涵蓋該中心位置的對(duì)應(yīng)octreel葉子節(jié)點(diǎn)下;
s432、對(duì)octreel中的每個(gè)葉子節(jié)點(diǎn)選取掛載至該葉子節(jié)點(diǎn)中的所有構(gòu)件的最大占屏值的最大值設(shè)定為其最大占屏值pmax;
s433、對(duì)構(gòu)件集合s,遍歷每個(gè)構(gòu)件,取出對(duì)應(yīng)的包圍盒中心,將其掛載至涵蓋該中心位置的對(duì)應(yīng)octrees葉子節(jié)點(diǎn)下;
s434、對(duì)octrees中的每個(gè)葉子節(jié)點(diǎn)選取掛載至該葉子節(jié)點(diǎn)中的所有構(gòu)件的最大占屏值的最大值設(shè)定為其最大占屏值pmax。
可理解的是,pmax表示葉子節(jié)點(diǎn)下所有構(gòu)件最大占屏值的最大值。進(jìn)一步地,所述對(duì)通過(guò)視錐體裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)裁剪測(cè)試,包括:
獲取視點(diǎn)到通過(guò)視錐體裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)包圍盒中心的距離與預(yù)設(shè)比例因子的第一乘積;
比較所述第一乘積與對(duì)應(yīng)的葉子節(jié)點(diǎn)下所有構(gòu)件的最大占屏值的最大值的大?。?/p>
若所述對(duì)應(yīng)的葉子節(jié)點(diǎn)的所述第一乘積小于等于該葉子節(jié)點(diǎn)所有構(gòu)件的最大占屏值的最大值,則該葉子節(jié)點(diǎn)通過(guò)細(xì)節(jié)裁剪測(cè)試。
在本發(fā)明實(shí)施例的一個(gè)具體的實(shí)施方式中,對(duì)第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)裁剪測(cè)試的過(guò)程如下:
s511、計(jì)算視點(diǎn)到該葉子節(jié)點(diǎn)包圍盒中心的距離d與設(shè)定比例因子α的乘積t1,以此值作為估算該葉子節(jié)點(diǎn)下最大的構(gòu)件投影至屏幕的像素大小,并比較pmax與t1的大??;
s512、若t1小于等于pmax,則表示該節(jié)點(diǎn)經(jīng)過(guò)細(xì)節(jié)裁剪測(cè)試(亦即該節(jié)點(diǎn)中的所有構(gòu)件在屏幕上顯示的像素足夠大),對(duì)該葉子節(jié)點(diǎn)下的所有構(gòu)件進(jìn)行繪制;
s513、若t1大于pmax,則表示該節(jié)點(diǎn)未經(jīng)過(guò)細(xì)節(jié)裁剪測(cè)試(亦即該節(jié)點(diǎn)中的所有構(gòu)件在屏幕上顯示的像素足夠小),則在此幀內(nèi),無(wú)需對(duì)該葉子節(jié)點(diǎn)下的所有構(gòu)件進(jìn)行繪制。
可理解的是,本發(fā)明實(shí)施例計(jì)算視點(diǎn)到葉子節(jié)點(diǎn)包圍盒中心的距離d與設(shè)定比例因子α的乘積t1,可用于快速估算出構(gòu)件投影至屏幕的像素點(diǎn)數(shù)量,其原理參見(jiàn)圖5。
如圖5所示,ab為近平面(其通常作為投影平面),cd為遠(yuǎn)平面。為了方便說(shuō)明,以圓o表示位于視口中的構(gòu)件,其半徑為|po|,且ab的中垂線過(guò)圓心o(即en⊥ab)。那么,po投影至ab上的長(zhǎng)度為2|mn|,
其中
其中,|ab|=2*|en|*tanθ,θ為∠aeo(2∠aeo即為視場(chǎng)角,在程序運(yùn)行時(shí)設(shè)置為常量,在實(shí)際應(yīng)用中,視場(chǎng)角選擇為30°)。
由此可得,
因此,構(gòu)件的大小與構(gòu)件至視點(diǎn)距離的關(guān)系為
采用上述公式,模擬計(jì)算出一定大小的構(gòu)件,在一定的距離上,其投影至屏幕占用像素點(diǎn)數(shù)量為1*1px時(shí)k*tanθ的大小,并在1*1px的基礎(chǔ)上對(duì)k*tanθ進(jìn)行比例縮放,即可得到多個(gè)像素點(diǎn)時(shí)k'*tanθ的取值,此即為所述比例因子α。在實(shí)際應(yīng)用中,α取值為0.002,此時(shí)在分辨率為1920*1080的屏幕,其對(duì)應(yīng)的像素點(diǎn)數(shù)量閾值大約為14*8px。故對(duì)于所述的葉子節(jié)點(diǎn)的最大占屏值與視點(diǎn)到葉子節(jié)點(diǎn)包圍盒中心的距離d的商與α的比較,即可得出該葉子節(jié)點(diǎn)下所有構(gòu)件中尺寸最大的構(gòu)件投影至屏幕上的估算像素值是否大于等于比例因子α所對(duì)應(yīng)的像素值。由于除法在計(jì)算機(jī)中的運(yùn)算量大,故采用視點(diǎn)到葉子節(jié)點(diǎn)包圍盒中心的距離d與比例因子α的乘積與最大占屏值進(jìn)行對(duì)比。
圖6是本發(fā)明一個(gè)實(shí)施例的流程工廠模型繪制方法的流程示意圖。如圖6所示,本發(fā)明實(shí)施例的方法包括:
s1’:對(duì)流程工廠模型進(jìn)行裁剪;
需要說(shuō)明的是,本發(fā)明實(shí)施例的繪制方法采用上述實(shí)施例中的裁剪方法對(duì)流程工廠模型進(jìn)行裁剪。
s2’:對(duì)通過(guò)裁剪測(cè)試的葉子節(jié)點(diǎn)進(jìn)行繪制。
進(jìn)一步地,所述對(duì)通過(guò)裁剪測(cè)試的葉子節(jié)點(diǎn)進(jìn)行繪制包括:
對(duì)通過(guò)視錐體裁剪測(cè)試的第一空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)層次lod繪制,并對(duì)通過(guò)視錐體裁剪測(cè)試和細(xì)節(jié)裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)層次lod繪制。
具體地,對(duì)葉子節(jié)點(diǎn)的細(xì)節(jié)層次lod繪制過(guò)程如下:
遍歷通過(guò)測(cè)試的葉子節(jié)點(diǎn)的所有構(gòu)件,依次取出最大占屏值pi;
計(jì)算視點(diǎn)到該構(gòu)件包圍盒中心的距離d與預(yù)設(shè)比例因子β的乘積t2;
比較t2與pi的大小,若t2大于pi,則對(duì)該構(gòu)件選取低精度精度進(jìn)行重繪,否則,采取高精度進(jìn)行重繪。
可理解的是,本發(fā)明實(shí)施例的比例因子β與上述比例因子α的求取方法類似,所不同的是對(duì)占用像素點(diǎn)數(shù)量為1*1px時(shí)k*tanθ的比例縮放倍數(shù),在此不再贅述。
本發(fā)明實(shí)施例根據(jù)構(gòu)成構(gòu)件的體素特征,采用給定體素最大占屏值的求取規(guī)則,依據(jù)最大占屏值來(lái)近似表示構(gòu)件的大小。繼而通過(guò)最大占屏值將構(gòu)件按照給定的劃分參照p按照大小將其分成兩個(gè)集合。對(duì)于存儲(chǔ)最大占屏值較大的集合l,可以應(yīng)用八叉樹(shù)空間的有序性,對(duì)葉子節(jié)點(diǎn)快速進(jìn)行視錐體裁剪,以及可選對(duì)經(jīng)過(guò)視錐體裁剪測(cè)試的葉子節(jié)點(diǎn)中的構(gòu)件進(jìn)行相應(yīng)的細(xì)節(jié)層次lod繪制,其最終繪制出的結(jié)果可表示精確表示整個(gè)模型在空間的大致輪廓。而對(duì)存儲(chǔ)最大占屏值較小的集合s,通過(guò)對(duì)建立的八叉樹(shù)octrees的葉子節(jié)點(diǎn)進(jìn)行相應(yīng)的細(xì)節(jié)裁剪,根據(jù)每個(gè)葉子節(jié)點(diǎn)的最大占屏值pmax,以及所述的視點(diǎn)至葉子節(jié)點(diǎn)中心距離與比例因子的乘積的估計(jì)像素進(jìn)行對(duì)比,可以快速確認(rèn)該葉子節(jié)點(diǎn)下的所有構(gòu)件是否繪制。相比于傳統(tǒng)的裁剪方法中直接根據(jù)三角面片計(jì)算投影至屏幕的像素點(diǎn)數(shù)量的方法,本發(fā)明實(shí)施例直接從空間組織和構(gòu)件層面上進(jìn)行快速估計(jì)投影至屏幕的像素點(diǎn)數(shù)量,大大降低了數(shù)據(jù)處理規(guī)模,從而達(dá)到顯示提升幀率的效果。
圖7是本發(fā)明一個(gè)實(shí)施例的流程工廠模型裁剪裝置的結(jié)構(gòu)示意圖。如圖7所示,本發(fā)明實(shí)施例的裝置包括構(gòu)件創(chuàng)建單元71、構(gòu)件要素獲取單元72、構(gòu)件集合劃分單元73、空間八叉樹(shù)構(gòu)建單元74和裁剪測(cè)試單元75,具體地:
構(gòu)件創(chuàng)建單元71,用于加載流程工廠模型,創(chuàng)建與所述流程工廠模型對(duì)應(yīng)的多個(gè)構(gòu)件;
構(gòu)件要素獲取單元72,用于根據(jù)各個(gè)構(gòu)件的體素特征獲取所述各個(gè)構(gòu)件的最大占屏值和空間包圍盒;
構(gòu)件集合劃分單元73,用于根據(jù)所述各個(gè)構(gòu)件的最大占屏值將所述多個(gè)構(gòu)件劃分成第一構(gòu)件集合和第二構(gòu)件集合,所述第一構(gòu)件集合中的構(gòu)件的最大占屏值大于預(yù)設(shè)閾值,所述第二構(gòu)件集合中的構(gòu)件的最大占屏值小于預(yù)設(shè)閾值;
空間八叉樹(shù)構(gòu)建單元74,用于根據(jù)所述各個(gè)構(gòu)件的空間包圍盒分別求取所述第一構(gòu)件集合的第一最大空間包圍盒和所述第二構(gòu)件集合的第二空間最大包圍盒,根據(jù)所述第一最大空間包圍盒構(gòu)建與所述第一構(gòu)件集合對(duì)應(yīng)的第一空間八叉樹(shù),并根據(jù)所述第二最大空間包圍盒構(gòu)建與所述第二構(gòu)件集合對(duì)應(yīng)的第二空間八叉樹(shù);
裁剪測(cè)試單元75,用于對(duì)所述第一空間八叉樹(shù)和所述第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行視錐體裁剪測(cè)試,對(duì)通過(guò)視錐體裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)裁剪測(cè)試。
在本發(fā)明實(shí)施例的一種可選的實(shí)施方式中,空間八叉樹(shù)構(gòu)建單元74進(jìn)一步用于:
根據(jù)所述第一最大空間包圍盒層次遞歸劃分所述第一構(gòu)件集合,構(gòu)建第一空間八叉樹(shù),遍歷所述第一構(gòu)件集合,將所述第一構(gòu)件集合中的各個(gè)構(gòu)件掛載至涵蓋當(dāng)前遍歷構(gòu)件的包圍盒中心位置的所述第一空間八叉樹(shù)的葉子節(jié)點(diǎn)下;
并根據(jù)所述第二最大空間包圍盒層次遞歸劃分所述第二構(gòu)件集合,構(gòu)建第二空間八叉樹(shù),遍歷所述第二構(gòu)件集合,將所述第二構(gòu)件集合中的各個(gè)構(gòu)件掛載至涵蓋當(dāng)前遍歷構(gòu)件的包圍盒中心位置的所述第二空間八叉樹(shù)的葉子節(jié)點(diǎn)下。
裁剪測(cè)試單元75進(jìn)一步用于:
獲取視點(diǎn)到通過(guò)視錐體裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)包圍盒中心的距離與預(yù)設(shè)比例因子的第一乘積;
比較所述第一乘積與對(duì)應(yīng)的葉子節(jié)點(diǎn)下所有構(gòu)件的最大占屏值的最大值的大??;
若所述對(duì)應(yīng)的葉子節(jié)點(diǎn)的所述第一乘積小于等于該葉子節(jié)點(diǎn)所有構(gòu)件的最大占屏值的最大值,則該葉子節(jié)點(diǎn)通過(guò)細(xì)節(jié)裁剪測(cè)試。
本發(fā)明實(shí)施例的流程工廠模型繪制裝置可以用于執(zhí)行上述方法實(shí)施例,其原理和技術(shù)效果類似,此處不再贅述。
圖8是本發(fā)明一個(gè)實(shí)施例的流程工廠模型繪制裝置的結(jié)構(gòu)示意圖。如圖8所示,本發(fā)明實(shí)施例的裝置包括裁剪單元81和繪制單元82,具體地:
裁剪單元81,用于對(duì)流程工廠模型進(jìn)行裁剪;
繪制單元82,用于對(duì)通過(guò)裁剪測(cè)試的葉子節(jié)點(diǎn)進(jìn)行繪制。
在本發(fā)明實(shí)施例的一種可選的實(shí)施方式中,繪制單元82進(jìn)一步用于:
對(duì)通過(guò)視錐體裁剪測(cè)試的第一空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)層次lod繪制,并對(duì)通過(guò)視錐體裁剪測(cè)試和細(xì)節(jié)裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)層次lod繪制。
本發(fā)明實(shí)施例的流程工廠模型繪制裝置可以用于執(zhí)行上述方法實(shí)施例,其原理和技術(shù)效果類似,此處不再贅述。
本發(fā)明實(shí)施例提供的流程工廠模型裁剪、繪制方法及裝置,加載流程工廠模型,創(chuàng)建與所述流程工廠模型對(duì)應(yīng)的多個(gè)構(gòu)件;將所述多個(gè)構(gòu)件劃分為第一構(gòu)件集合和第二構(gòu)件集合,構(gòu)建與第一構(gòu)件集合對(duì)應(yīng)的第一空間八叉樹(shù),構(gòu)建與第二構(gòu)件集合對(duì)應(yīng)的第二空間八叉樹(shù);對(duì)所述第一空間八叉樹(shù)和所述第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行視錐體裁剪測(cè)試,對(duì)通過(guò)視錐體裁剪測(cè)試的第二空間八叉樹(shù)的葉子節(jié)點(diǎn)進(jìn)行細(xì)節(jié)裁剪測(cè)試。本發(fā)明實(shí)施例利用構(gòu)件體素特征,可以按照最大占屏值,估計(jì)構(gòu)件件在一定的視距下投影至屏幕的像素點(diǎn)數(shù)量;利用最大占屏值,可以快速的區(qū)分出構(gòu)件大小,完整繪制尺寸大的構(gòu)件,較為精確的繪制出整個(gè)模型的輪廓;對(duì)尺寸小的構(gòu)件進(jìn)行細(xì)節(jié)裁剪,避免現(xiàn)有技術(shù)中判斷計(jì)算像素的方式,保證在繪制一幀的過(guò)程中,最大化的減少所需遍歷與計(jì)算的數(shù)量,提高裁剪處理效率,從而提高渲染幀率。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤(pán)存儲(chǔ)器、cd-rom、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
需要說(shuō)明的是術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同要素。
本發(fā)明的說(shuō)明書(shū)中,說(shuō)明了大量具體細(xì)節(jié)。然而能夠理解的是,本發(fā)明的實(shí)施例可以在沒(méi)有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說(shuō)明書(shū)的理解。類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本發(fā)明公開(kāi)并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開(kāi)的方法解釋呈反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說(shuō),如權(quán)利要求書(shū)所反映的那樣,發(fā)明方面在于少于前面公開(kāi)的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書(shū)由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
以上實(shí)施例僅用于說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。