智能3d模型的自動布局方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了智能3D模型的自動布局方法和系統(tǒng),其自動布局方法包括:A、構(gòu)建3D場景、解析3D文件獲得引擎數(shù)據(jù),基于所述引擎數(shù)據(jù)進行渲染,其中所述引擎數(shù)據(jù)包括模型及攝像機的位置;B、根據(jù)所述模型與攝像機的位置過濾所述3D場景中相對于所述攝像機無效的模型;C、基于過濾后所保留的模型,以其中任一模型為基準,計算出在預(yù)設(shè)方向的鄰居模型,并標記所述鄰居模型;D、將所標記的模型組成布局,通過用戶輸入指令更改焦點模型。本發(fā)明采用3D模型到屏幕上的映射算法,計算出模型之間的空間關(guān)系,并空間關(guān)系抽象為布局,方便了焦點的移動,解決了現(xiàn)有3D應(yīng)用中焦點的移動方式固化的問題。
【專利說明】智能3D模型的自動布局方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及機器視覺技術(shù),特別涉及一種智能3D模型的自動布局方法和系統(tǒng)。
【背景技術(shù)】
[0002]隨著智能設(shè)備的興起,3D應(yīng)用在智能應(yīng)用市場上的比例越來越重,針對3D的應(yīng)用開發(fā)也在逐漸升溫。目前網(wǎng)絡(luò)上大量的3D引擎只針對模型進行管理,針對視圖管理的3D引擎乏善可陳。特別地,現(xiàn)有的3D應(yīng)用中焦點的移動方式只能固化在程序中,例如,模型A的左邊為模型B,上邊為模型C,若程序中固定焦點左移只能選擇模型B,而當模型B的位置與模型C互換后,控制焦點仍會默認其左邊的模型為B,因此左移時仍會選擇模型B,而實際上此時模型A的左邊為模型C,這樣就會出現(xiàn)操作與屏幕顯示不對應(yīng),因而3D場景的布局有任何微小的變化都需要重新修改程序來控制焦點移動時選擇的對象,進而給用戶的操作帶來不便。同時,現(xiàn)有的這種焦點移動方法適用范圍十分狹窄、固化且不能與屏幕顯示的內(nèi)容同步,影響用戶的使用。
[0003]因此,現(xiàn)有技術(shù)還有待于改進和發(fā)展。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的在于提供一種智能3D模型的自動布局方法和系統(tǒng),以解決現(xiàn)有技術(shù)焦點的移動方式固化的問題。
[0005]為了達到上述目的,本發(fā)明采取了以下技術(shù)方案:
一種3D模型的自動布局方法,其包括:
A、構(gòu)建3D場景、解析3D文件獲得引擎數(shù)據(jù),基于所述引擎數(shù)據(jù)進行渲染,其中所述引擎數(shù)據(jù)包括模型及攝像機的位置;
B、根據(jù)所述模型與攝像機的位置過濾所述3D場景中相對于所述攝像機無效的模型;
C、基于過濾后所保留的模型,以其中任一模型為基準,計算出在預(yù)設(shè)方向的鄰居模型,并標記所述鄰居模型;
D、將所標記的模型組成布局。
[0006]所述的智能3D模型的自動布局方法,其中,所述步驟B具體包括:
B1、當模型與攝像機的距離超過視錐體的遠剪裁面時,過濾該模型;
B2、過濾位于攝像機捕捉范圍外的模型;
B3、過濾后所剩余的模型中,當兩個模型重疊時,計算比較兩個模型到攝像機的距離,過濾距離攝像機遠的模型。
[0007]所述的智能3D模型的自動布局方法,其中,所述步驟B2具體包括:
B21、根據(jù)模型上所有頂點的坐標大小獲取該模型的立方體包圍盒;
B22、將所述立方體包圍盒的8個頂點映射到屏幕上,形成平面包圍盒;
B23、獲取預(yù)設(shè)的屏幕視口的區(qū)域范圍,當所述8個頂點均在屏幕視口的區(qū)域范圍外時,過濾該8個頂點對應(yīng)的模型,其中所述區(qū)域范圍為預(yù)設(shè)屏幕視口的高度及寬度所形成的區(qū)域。
[0008]所述的智能3D模型的自動布局方法,其中,所述步驟B3具體包括:
B31、過濾后所剩余的模型的任意兩個模型中,將其中一個模型的平面包圍盒的4個頂點坐標循環(huán)遍歷另一個模型的頂點坐標;
B32、判斷一個模型的頂點坐標的X值是否大于另一個模型的最小X值而小于該模型的最大X值;以及判斷一個模型的頂點坐標的I值是否大于另一個模型的最小I值而小于該模型的最大y值,當判斷結(jié)果均為是時,表示所述兩個模型重疊,轉(zhuǎn)向步驟B33,否則所述兩個模型不重疊;
B33、分別計算比較兩個模型到攝像機的距離,過濾距離攝像機遠的模型。
[0009]所述的智能3D模型的自動布局方法,其中,所述步驟C具體包括:
Cl、以任一模型為基準模型,根據(jù)該基準模型對應(yīng)的平面包圍盒的中心點劃出其在預(yù)設(shè)方向下的預(yù)設(shè)范圍;
C2、判斷其他模型對應(yīng)的平面包圍盒的任一頂點是否位于所述預(yù)設(shè)范圍內(nèi):若是,則記錄該頂點及與其對應(yīng)的模型;否則標記該頂點對應(yīng)的模型在預(yù)設(shè)方向上無效,其中所述其他模型為經(jīng)過過濾后所得到的模型中除去所述基準模型之外的模型;
C3、分別計算所記錄的頂點到所述中心點的距離,將距離最小的頂點所對應(yīng)的模型標記為基準模型的預(yù)設(shè)方向的鄰居,并記下所述最小距離對應(yīng)的頂點。
[0010]所述的智能3D模型的自動布局方法,其中,所述預(yù)設(shè)方向為向左,所述步驟Cl具體包括:以一模型為基準模型,從該基準模型對應(yīng)的平面包圍盒的中心點到其左上角的頂點引出第一射線,從該中心點到左下角的頂點引出第二射線,第一射線與第二射線之間夾角區(qū)域為預(yù)設(shè)范圍。
[0011]所述的智能3D模型的自動布局方法,其中,所述判斷其他模型對應(yīng)的平面包圍盒的任一頂點是否位于預(yù)設(shè)范圍內(nèi),具體包括:
C21、從所述中心點到其他模型對應(yīng)的平面包圍盒的頂點引出向量;
C22、將向量與所述第一射線進行點乘得到第一數(shù)值,向量與所述第二射線進行點乘得到第二數(shù)值;
C23、當?shù)谝粩?shù)值與第二數(shù)值的乘積小于或等于零時,該頂點位于預(yù)設(shè)范圍內(nèi)。
[0012]所述的智能3D模型的自動布局方法,其中,所述預(yù)設(shè)方向為向左或向右時,所述步驟C3之后還包括:
C4、若所記下的頂點有多個時,判斷多個頂點是否屬于同一平面包圍盒:若是,則保留所述多個頂點中的一個頂點,將該頂點對應(yīng)的模型標記為基準模型的預(yù)設(shè)方向鄰居;否則轉(zhuǎn)向步驟C5 ;
C5、比較各個頂點對應(yīng)的I值,取最大I值對應(yīng)的頂點,并將該頂點對應(yīng)的模型標記為基準模型的左或右鄰居。
[0013]所述的智能3D模型的自動布局方法,其中,
所述預(yù)設(shè)方向為向上或向下時,所述步驟C3之后還包括:
C6、若所記下的頂點有多個時,判斷多個頂點是否屬于同一平面包圍盒:若是,則保留所述多個頂點中的一個頂點,將該頂點對應(yīng)的模型標記為基準模型的預(yù)設(shè)方向鄰居;否則轉(zhuǎn)向步驟C7 ; C7、比較各個頂點對應(yīng)的X值,取最小X值對應(yīng)的頂點,并將該頂點對應(yīng)的模型標記為基準模型的上或下鄰居。
[0014]—種3D模型的自動布局方法的系統(tǒng),其包括:
場景構(gòu)建模塊,用于構(gòu)建3D場景、解析3D文件獲得引擎數(shù)據(jù),基于所述引擎數(shù)據(jù)進行渲染,其中所述引擎數(shù)據(jù)包括模型及攝像機的位置;
過濾模塊,用于根據(jù)所述模型與攝像機的位置過濾所述3D場景中相對于所述攝像機無效的模型;
鄰居計算模塊,用于基于過濾后所保留的模型,以其中任一模型為基準,計算出在預(yù)設(shè)方向的鄰居模型,并標記所述鄰居模型;
布局模塊,用于將所標記的模型組成布局。
[0015]相較于現(xiàn)有技術(shù),本發(fā)明提供的智能3D模型的自動布局方法和系統(tǒng),構(gòu)建3D場景后,根據(jù)模型與攝像機的距離過濾3D場景中無效的模型,計算出位于剩余的模型上、下、左、右方向的預(yù)設(shè)范圍內(nèi)的模型并對應(yīng)標記為上鄰居、下鄰居、左鄰居、右鄰居,使每個模型的上、下、左、右方向僅保留I個或O個模型,最后將所有模型組成布局,通過輸入的鍵盤事件更改焦點模型,方便了焦點的移動,解決了現(xiàn)有3D應(yīng)用中焦點的移動方式固化、布局更改后需重新修改程序來控制焦點選擇的問題。
【專利附圖】
【附圖說明】
[0016]圖1為本發(fā)明智能3D模型的自動布局方法的方法流程圖。
[0017]圖2為本發(fā)明智能3D模型的自動布局方法的實施例平面包圍盒的示意圖。
[0018]圖3為本發(fā)明智能3D模型的自動布局方法的實施例中左鄰居的計算模擬示意圖。
[0019]圖4為本發(fā)明智能3D模型的自動布局系統(tǒng)的結(jié)構(gòu)框圖。
【具體實施方式】
[0020]本發(fā)明提供一種智能3D模型的自動布局方法和系統(tǒng),通過對3D場景中的模型進行過濾,采用3D模型到屏幕上的映射算法,計算出模型之間的空間關(guān)系,使每個模型的上、下、左、右方向僅保留I個或O個模型,再將這些模型布局,使空間關(guān)系抽象為布局,通過Manger控制所有模型,方便焦點的移動。為使本發(fā)明的目的、技術(shù)方案及效果更加清楚、明確,以下參照附圖并舉實施例對本發(fā)明進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0021]請參閱圖1,其為本發(fā)明智能3D模型的自動布局方法的方法流程圖。如圖1所示,所述的智能3D模型的自動布局方法包括以下步驟:
S100、構(gòu)建3D場景、解析3D文件獲得引擎數(shù)據(jù),基于所述引擎數(shù)據(jù)進行渲染;
本實施例中,利用3D技術(shù)構(gòu)建3D場景,使用與該3D場景對應(yīng)的解析庫將3D文件解析為引擎數(shù)據(jù),之后基于該引擎數(shù)據(jù)在屏幕上渲染出可視物體。其中,所解析出來的引擎數(shù)據(jù)包括攝像機的位置、模型的位置及大小等屬性,本實施例中不對所述攝像機的位置進行限制,但是每個模型與攝像機的相對位置是相對固定的,所述模型至少包括一個,優(yōu)選地,所述模型為多個在本實施例中,由于構(gòu)件3D場景為現(xiàn)有技術(shù),此處對此不再贅述。
[0022]S200、根據(jù)所述模型與攝像機的位置過濾所述3D場景中相對于所述攝像機無效的模型;
S300、基于過濾后所保留的模型,以其中任一模型為基準,計算出在預(yù)設(shè)方向的鄰居模型,并標記所述鄰居模型;
具體地,所述預(yù)設(shè)方向包括左、右及上、下方向。
[0023]S400、將所標記的模型組成布局。
[0024]本實施例中,還可包括步驟:通過用戶輸入指令更改焦點模型這一步驟,此時所有標記模型組成布局后,用戶可按實際情況而設(shè)定焦點模型,其中所述用戶輸入指令包括用戶輸入的鍵盤事件等。
[0025]在步驟SlOO中,先通過3D技術(shù)構(gòu)建3D場景,將此3D場景保存為相應(yīng)格式的文件;再利用對應(yīng)的解析庫將所述文件解析為引擎的數(shù)據(jù);接著可使用OpenGL (Open GraphicsLibrary,三維圖形標準)、DirectX (Direct extension,一種多媒體編程接口)或者CPU(CentralProcessingUnit,中央處理器)軟件渲染技術(shù)等構(gòu)建3D場景并渲染,其中,解析出來的引擎數(shù)據(jù)包括攝像機的位置、模型的位置、大小、材質(zhì)和紋理屬性,利用這些屬性引擎就可以在屏幕上渲染出可視物體。
[0026]3D場景構(gòu)建完成后,有些模型并不適合參與鄰居布局,需要對3D場景中不必要的模型(即相對于攝像機無效的模型)進行篩選過濾。本實施例中步驟S200通過以下三個步驟來過濾不必要的模型:
步驟1、處理離攝像機比較遠的模型。當一個模型與攝像機的距離超過視錐體的遠剪裁面時,過濾該模型。其中,視錐體(frustum)是指場景中攝像機的可見的一個錐體范圍,遠剪裁面是指攝像機能看見的最遠距離。比遠剪裁面還遠的物體不可見,因此需過濾。
[0027]步驟2、處理在攝像機之外的模型。即過濾位于攝像機捕捉范圍外的模型,【具體實施方式】包括:
第一步、根據(jù)模型上所有頂點的坐標大小獲取該模型的立方體包圍盒。遍歷模型上所有的頂點,提取所述頂點的3D坐標(X,y, z),在所提取的所有3D坐標中查詢出x、y、z坐標值中的最大值和最小值,結(jié)合這6個坐標值在三維(3D)坐標系中形成該模型的立方體包圍盒,其中每一個模型對應(yīng)一個立方體包圍盒。
[0028]第二步、將所述立方體包圍盒的8個頂點映射到屏幕上,形成平面包圍盒。此步驟即實現(xiàn)3D圖形系統(tǒng)的坐標轉(zhuǎn)換,將3D投影到2D窗口。具體實施時依次通過3D相對坐標系——> 模型視圖矩陣變換——> 投影矩陣變換——> 透視除法歸一化——> 視口變換一> 屏幕2D坐標(帶有深度信息的屏幕坐標(X,y))。請同時參閱圖2,其中的虛線圖為立方體包圍盒到屏幕上的映射點,實線圖為2D圖形。
[0029]第三步、獲取預(yù)設(shè)的屏幕視口的區(qū)域范圍,當所述8個頂點均在屏幕視口的區(qū)域范圍外時,過濾該8個頂點對應(yīng)的模型,其中,所述區(qū)域范圍可為預(yù)設(shè)屏幕視口的高度及寬度所形成的區(qū)域,還可以是由預(yù)設(shè)屏幕視口的長度及寬度所形成區(qū)域的大小,此處對此不作限制。當所述8個頂點均在所述屏幕視口的高度與寬度所圍成的區(qū)域外時,過濾掉所述8個頂點對應(yīng)的模型。本步驟中獲取程序初始化時設(shè)置的屏幕視口的寬高,判斷立方體包圍盒的8個頂點是否在屏幕視口的寬高所形成的區(qū)域范圍內(nèi)。只要有一個頂點在所述區(qū)域范圍內(nèi),則該立方體包圍盒對應(yīng)的模型有效,保留;若8個頂點均在所述寬高范圍外則無效,過濾該立方體包圍盒對應(yīng)的模型。[0030]對3D場景中所有模型都進行上述步驟1、2處理后剩余的即是有效的模型,需判斷所述有效的模型是否重疊。[0031]步驟3、當兩個模型重疊時,計算比較兩個模型到攝像機的距離,過濾距離攝像機遠的模型。請繼續(xù)參閱圖2,在上述第二步中得到了模型的立方體包圍盒的8個頂點在屏幕上的映射,根據(jù)這8個頂點在屏幕上的位置查詢出立方體包圍盒在X和y軸上的最小值和最大值,然后形成一個屏幕上的矩形的平面包圍盒,如圖2中黑色方框所示。
[0032]統(tǒng)計出模型的平面包圍盒的4個頂點坐標,選取過濾后所剩余的模型中任意兩個模型,先將其中一個模型的平面包圍盒的4個頂點坐標循環(huán)遍歷另一個模型的頂點坐標。接著判斷一個模型的頂點坐標的X值是否大于另一個模型的最小X值而小于該模型的最大X值;以及判斷一個模型的頂點坐標的I值是否大于另一個模型的最小I值而小于該模型的最大I值。即判斷一個模型的頂點坐標的X值是否在另一個模型的最小X值與最大X值之間、且該模型的頂點坐標的I值是否在所述另一個模型的最小I值與最大I值之間。當判斷結(jié)果均為是時,表示所述兩個模型重疊,則分別計算比較兩個模型到攝像機的距離,過濾距離攝像機遠的模型。當判斷結(jié)果為否時,表示兩個模型不重疊。
[0033]假設(shè)模型A和模型B。將模型B的4個頂點坐標與A模型的4個頂點坐標進行比較,找出X軸上的最大值xB_max,最小值xB_min ;y軸上的最大值yB_max,最小值yB_min。將模型A的頂點I的坐標(xAl,yAl)分別與模型B的4個頂點坐標進行比較,當xB_min〈xl〈xB_max,且yB_min〈yl〈yB_max時,表示模型A和模型B重疊。此時需要分別計算模型A和模型B到攝像機的距離,以模型A為例,假設(shè)模型A的三維坐位(一般選模型A的中心點)為(xl,yl,zl),攝像機(一般選攝像機的中心點)坐標為(12,72,22),模型々到攝像機的距離
L= sqrt ((xl_x2) * (xl_x2) + (yl_y2) * (yl_y2) + (zl_z2) * (zl_z2))。同理計算出模型B到攝像機的距離,比較所計算的距離,將距離遠的模型過濾。
[0034]經(jīng)過上述步驟S200過濾后,對剩余的模型求取其鄰居模型,即找出位于各模型上、下、左、右方向的預(yù)設(shè)范圍內(nèi)的模型。以計算模型的左方向為例,請同時參閱圖3,計算出位于基準模型預(yù)設(shè)方向的模型并對應(yīng)標記為預(yù)設(shè)方向鄰居的方法具體包括:
步驟301、以任一模型為基準模型,根據(jù)該基準模型對應(yīng)的平面包圍盒的中心點劃出其在預(yù)設(shè)方向下的預(yù)設(shè)范圍,其中,所述預(yù)設(shè)范圍為以中線點到預(yù)設(shè)方向兩側(cè)的頂點所引出的射線之間所在的區(qū)域。具體實施時,以任一模型為基準模型,如圖3所示,優(yōu)選地,假設(shè)預(yù)設(shè)方向為向左,則從該基準模型對應(yīng)的平面包圍盒a的中心點PO到其左上角的頂點Pl引出第一射線rl,從該中心點PO到左下角的頂點P2引出第二射線r2,第一射線rl與第二射線r2之間夾角區(qū)域為預(yù)設(shè)范圍,夾角為β。
[0035]步驟302、判斷其他模型對應(yīng)的平面包圍盒的任一頂點是否位于所述預(yù)設(shè)范圍內(nèi):若是,則記錄該頂點及與其對應(yīng)的模型;否則標記該頂點對應(yīng)的模型在預(yù)設(shè)方向上無效。具體判斷時,先從所述中心點到其他模型對應(yīng)的平面包圍盒的頂點引出向量;再將向量與所述第一射線進行點乘得到第一數(shù)值,向量與所述第二射線進行點乘得到第二數(shù)值;根據(jù)幾何向量學相關(guān)原理得知,當?shù)谝粩?shù)值與第二數(shù)值的乘積小于或等于零(即符號相反或其中至少一個為零)時,該頂點位于預(yù)設(shè)范圍內(nèi)。請同時參閱圖3,假設(shè)第一射線向量為(Plx,Ply),中心點PO到頂點P3的向量為(P2x,P2y),則點乘公式:Plx*P2x + Ply*P2y=第一數(shù)值,同理可推出第二數(shù)值,若第一與第二數(shù)值的乘積小于或等于零時,則表示該模型在所述預(yù)設(shè)范圍內(nèi),記錄下該頂點。具體地,所述第一及第二數(shù)值有三種可能,即第一數(shù)值與第二數(shù)值的符號相同、第一及第二數(shù)值的符號相反,或者第一或第二數(shù)值的其中至少一個為零,當其中一個為零時,說明該頂點在射線上,即在預(yù)設(shè)范圍之內(nèi),若第一及第二符號相反,則說明該頂點在預(yù)設(shè)范圍之內(nèi),而當?shù)谝粩?shù)值與第二數(shù)值的符號相同時,則說明該頂點不在預(yù)設(shè)范圍之內(nèi),因此當?shù)谝患暗诙?shù)值的乘積大于零時,則說明該頂點不在預(yù)設(shè)范圍內(nèi),若小于或等于零,則說明在預(yù)設(shè)范圍之內(nèi)。本實施例中,所述其他模型為經(jīng)過過濾后所得到的模型中除去所述基準模型之外的模型。
[0036]步驟303、分別計算所記錄的頂點到所述中心點的距離,將距離最小的頂點所對應(yīng)的模型標記為基準模型的預(yù)設(shè)方向的鄰居,并記下所述最小距離對應(yīng)的頂點。
[0037]在步驟302中,假設(shè)有3個平面包圍盒,其位置如圖3所示。從中心點PO向平面包圍盒b、c、d的4個頂點分別引出一向量。本實施例以中心點PO向平面包圍盒b的頂點P3引出向量η為例,頂點P3的坐標為(Χ3,Υ3),中心點PO的坐標為(POx,POy)。將向量η與第一射線rl進行點乘,向量η.射線rl= X3* POx + Y3* POy=第一數(shù)值。點乘的結(jié)果為一數(shù)字,若第一數(shù)值為負數(shù),表示向量在射線的左邊,為正數(shù)在射線的右邊,為O則在射線上。射線的左右以其箭頭的方向為準。從圖3可知,當?shù)谝粩?shù)值為負數(shù)且第二數(shù)值為正數(shù)時,即向量在第一射線rl的左邊,且在第二射線r2的右邊時,該頂點才位于預(yù)設(shè)范圍內(nèi)。若向量在第一射線rl的右邊,或者在第二射線r2的左邊時,表示沒有頂點位于預(yù)設(shè)范圍內(nèi),此時基準模型的左鄰居為空。
[0038]圖3中,平面包圍盒d在預(yù)設(shè)范圍外,由于其可能是上鄰居,需標記其左無效,用于后續(xù)判斷。平面包圍盒b、c在預(yù)設(shè)范圍內(nèi),本發(fā)明在基準模型左邊最多只能保留I個模型,因此需要通過步驟303去掉多余的模型。在步驟303中,計算所有在預(yù)設(shè)范圍內(nèi)的頂點到中心點的距離,獲取距離最小的頂點。則此頂點所屬于的模型為當前模型的左鄰居,并標記;其余模型可淘汰。
[0039]具體實施時,若步驟303中計算出有多個頂點到中心點的距離相等。需要繼續(xù)淘汰;若所述預(yù)設(shè)方向為向左或向右時,在步驟303之后還包括:
步驟304、若所記下的頂點有多個時,判斷多個頂點是否屬于同一平面包圍盒:若是,則保留所述多個頂點中的一個頂點,將該頂點對應(yīng)的模型標記為基準模型的預(yù)設(shè)方向鄰居;否則,轉(zhuǎn)向步驟305。
[0040]步驟305、比較各個頂點對應(yīng)的y值,取最大I值對應(yīng)的頂點,并將該頂點對應(yīng)的模型標記為基準模型的左或右鄰居。
[0041]若所述預(yù)設(shè)方向為向上或向下時,在所述步驟303之后還包括:
步驟306、若所記下的頂點有多個時,判斷多個頂點是否屬于同一平面包圍盒:若是,則保留所述多個頂點中的一個頂點,將該頂點對應(yīng)的模型標記為基準模型的預(yù)設(shè)方向鄰居;否則轉(zhuǎn)向步驟307。
[0042]步驟307、比較各個頂點對應(yīng)的X值,取最小X值對應(yīng)的頂點,并將該頂點對應(yīng)的模型標記為基準模型的上或下鄰居。
[0043]具體實施時,以左為預(yù)設(shè)方向作為例子來具體說明如何進一步確定基準模型的鄰居,將所有滿足距離相等且距離最小的要求的頂點兩兩組合,假設(shè)為Pl和P2為一組,P3和P4為一組。如果Pl為一個平面包圍盒的一個頂點坐標,且P2也為該平面包圍盒的另一個頂點坐標,則P1、P2屬于同一個平面包圍盒。此時可將pi或P2從滿足要求的頂點中剔除。如果P3和P4均屬于另一個平面包圍盒,剔除p3或P4。假設(shè)此時未剔除Pl及P3,接著將未剔除的Pl和P3組合后繼續(xù)比較判斷,以確保每個平面包圍盒僅剩I個頂點,最后計算經(jīng)過剔除后所剩余頂點對應(yīng)的模型的中心點坐標到基準模型的中心點坐標的距離,距離最小的模型保留,其余的模型剔除。當有2個或多個距離相等且最小時,保留中心點位置偏上的模型,也即是坐標值中I值最大的模型,將其標記為左鄰居。
[0044]應(yīng)當理解的是,右鄰居、上鄰居、下鄰居的計算方式與上述實施例中左鄰居計算相同;射線方向?qū)?yīng)更改。計算出模型之間的空間關(guān)系應(yīng)滿足每個模型的上、下、左、右方向僅保留I個或O個模型,以滿足現(xiàn)有布局管理的規(guī)則,避免多出模型導致選擇混亂。另外,當對基準模型的上/下方向進行計算時,在步驟304中,若多個頂點不屬于同一平面包圍盒,則保留X值最小的頂點,保留偏左的模型,并將該頂點對應(yīng)的模型標記為基準模型的上/下鄰居。具體實施時,每個模型都需要作為一次基準模型來計算其上鄰居、下鄰居、左鄰居、右鄰居。標記時要標記出哪個模型是哪個模型的鄰居,這樣各模型的空間關(guān)系就能相互關(guān)聯(lián),之后可對空間關(guān)系進行布局。
[0045]在具體實施時,所述步驟S400具體包括:將步驟S10(TS200處理后剩余的所有模型采用一個Manger (布局管理器)來進行管理,將模型放在Manger的動態(tài)數(shù)組或者其他鏈表中。同時在Manger中保存一個模型指針,指向當前的焦點模型(即被選中的模型)。此外,當用戶輸入指令更改焦點模型時、即需要選擇另外一個模型時,將用戶輸入指令(包括用戶輸入的鍵盤事件等)傳輸給Manger, Manger收到鍵盤事件后是判斷其是否為方向鍵:如果不是則不作處理;如果是,根據(jù)該方向移動焦點,選中該方向上的與焦點模型相鄰的另一模型。這樣當模型更換位置后,根據(jù)上述實施例系統(tǒng)重新跑一遍布局流程,重新計算出鄰居關(guān)系,以確保焦點移動的準確性,且改變了現(xiàn)有焦點移動與模型固化的設(shè)置。
[0046]本發(fā)明實施例還相應(yīng)提供一種用于實現(xiàn)所述智能3D模型的自動布局方法的系統(tǒng),如圖4所示,所述系統(tǒng)包括:
場景構(gòu)建模塊110,用于構(gòu)建3D場景、解析3D文件獲得引擎數(shù)據(jù),基于所述引擎數(shù)據(jù)進行渲染,其中所述引擎數(shù)據(jù)包括模型及攝像機的位置。;
過濾模塊120,用于根據(jù)模型與攝像機的距離過濾3D場景中無效的模型;
鄰居計算模塊130,用于基于過濾后所保留的模型,以其中任一模型為基準,計算出在預(yù)設(shè)方向的鄰居模型,并標記所述鄰居模型(即計算出位于該基準模型預(yù)設(shè)方向的模型并對應(yīng)標記為預(yù)設(shè)方向鄰居);
布局模塊140,用于將所標記的模型組成布局;還可用于通過用戶輸入指令更改焦點模型。
[0047]由于上述系統(tǒng)中各個部分的功能已經(jīng)在上述方法實施例中進行了詳細介紹,此處不再贅述。
[0048]綜上所述,本發(fā)明構(gòu)建3D場景后,根據(jù)模型與攝像機的距離過濾3D場景中無效的模型,采用3D模型到屏幕上的映射算法,計算出位于剩余的模型上、下、左、右方向的預(yù)設(shè)范圍內(nèi)的模型并對應(yīng)標記為上鄰居、下鄰居、左鄰居、右鄰居,使每個模型的上、下、左、右方向僅保留I個或O個模型,計算得到模型之間的空間關(guān)系,最后將所有模型組成布局,將空間關(guān)系抽象為布局,通過輸入的鍵盤事件更改焦點模型,方便了焦點的移動,解決了現(xiàn)有3D應(yīng)用中焦點的移動方式固化、布局更改后需重新修改程序來控制焦點選擇的問題。
[0049]可以理解的是,對本領(lǐng)域普通技術(shù)人員來說,可以根據(jù)本發(fā)明的技術(shù)方案及其發(fā)明構(gòu)思加以等同替換或改變,而所有這些改變或替換都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護范圍。
【權(quán)利要求】
1.一種3D模型的自動布局方法,其特征在于,包括: A、構(gòu)建3D場景、解析3D文件獲得引擎數(shù)據(jù),基于所述引擎數(shù)據(jù)進行渲染,其中所述引擎數(shù)據(jù)包括模型及攝像機的位置; B、根據(jù)所述模型與攝像機的位置過濾所述3D場景中相對于所述攝像機無效的模型; C、基于過濾后所保留的模型,以其中任一模型為基準,計算出在預(yù)設(shè)方向的鄰居模型,并標記所述鄰居模型; D、將所標記的模型組成布局。
2.根據(jù)權(quán)利要求1所述的智能3D模型的自動布局方法,其特征在于,所述步驟B具體包括: B1、當模型與攝像機的距離超過視錐體的遠剪裁面時,過濾該模型; B2、過濾位于攝像機捕捉范圍外的模型; B3、過濾后所剩余的模型中,當兩個模型重疊時,計算比較兩個模型到攝像機的距離,過濾距離攝像機遠的模型。
3.根據(jù)權(quán)利要求2所述的智能3D模型的自動布局方法,其特征在于,所述步驟B2具體包括: B21、根據(jù)模型上所有頂點的坐標大小獲取該模型的立方體包圍盒; B22、將所述立方體包圍盒的8個頂點映射到屏幕上,形成平面包圍盒; B23、獲取預(yù)設(shè)的屏幕視口的區(qū)域范圍,當所述8個頂點均在屏幕視口的區(qū)域范圍外時,過濾該8個頂點對應(yīng)的模型,其中所述區(qū)域范圍為預(yù)設(shè)屏幕視口的高度及寬度所形成的區(qū)域。
4.根據(jù)權(quán)利要求2所述的智能3D模型的自動布局方法,其特征在于,所述步驟B3具體包括: B31、過濾后所剩余的模型的任意兩個模型中,將其中一個模型的平面包圍盒的4個頂點坐標循環(huán)遍歷另一個模型的頂點坐標; B32、判斷一個模型的頂點坐標的X值是否大于另一個模型的最小X值而小于該模型的最大X值;以及判斷一個模型的頂點坐標的I值是否大于另一個模型的最小I值而小于該模型的最大y值,當判斷結(jié)果均為是時,表示所述兩個模型重疊,轉(zhuǎn)向步驟B33,否則所述兩個模型不重疊; B33、分別計算比較兩個模型到攝像機的距離,過濾距離攝像機遠的模型。
5.根據(jù)權(quán)利要求3所述的智能3D模型的自動布局方法,其特征在于,所述步驟C具體包括: Cl、以任一模型為基準模型,根據(jù)該基準模型對應(yīng)的平面包圍盒的中心點劃出其在預(yù)設(shè)方向下的預(yù)設(shè)范圍; C2、判斷其他模型對應(yīng)的平面包圍盒的任一頂點是否位于所述預(yù)設(shè)范圍內(nèi):若是,則記錄該頂點及與其對應(yīng)的模型;否則標記該頂點對應(yīng)的模型在預(yù)設(shè)方向上無效,其中所述其他模型為經(jīng)過過濾后所得到的模型中除去所述基準模型之外的模型; C3、分別計算所記錄的頂點到所述中心點的距離,將距離最小的頂點所對應(yīng)的模型標記為基準模型的預(yù)設(shè)方向的鄰居,并記下所述最小距離對應(yīng)的頂點。
6.根據(jù)權(quán)利要求5所述的智能3D模型的自動布局方法,其特征在于,所述預(yù)設(shè)方向為向左,所述步驟Cl具體包括:以一模型為基準模型,從該基準模型對應(yīng)的平面包圍盒的中心點到其左上角的頂點引出第一射線,從該中心點到左下角的頂點引出第二射線,第一射線與第二射線之間夾角區(qū)域為預(yù)設(shè)范圍。
7.根據(jù)權(quán)利要求6所述的智能3D模型的自動布局方法,其特征在于,所述判斷其他模型對應(yīng)的平面包圍盒的任一頂點是否位于預(yù)設(shè)范圍內(nèi),具體包括: C21、從所述中心點到其他模型對應(yīng)的平面包圍盒的頂點引出向量; C22、將向量與所述第一射線進行點乘得到第一數(shù)值,向量與所述第二射線進行點乘得到第二數(shù)值; C23、當?shù)谝粩?shù)值與第二數(shù)值的乘積小于或等于零時,該頂點位于預(yù)設(shè)范圍內(nèi)。
8.根據(jù)權(quán)利要求5所述的智能3D模型的自動布局方法,其特征在于,所述預(yù)設(shè)方向為向左或向右時,所述步驟C3之后還包括: C4、若所記下的頂點有多個時,判斷多個頂點是否屬于同一平面包圍盒:若是,則保留所述多個頂點中的一個頂點,將該頂點對應(yīng)的模型標記為基準模型的預(yù)設(shè)方向鄰居;否則轉(zhuǎn)向步驟C5 ; C5、比較各個頂點對應(yīng)的I值,取最大I值對應(yīng)的頂點,并將該頂點對應(yīng)的模型標記為基準模型的左或右鄰居。
9.根據(jù)權(quán)利要求5所述的智能3D模型的自動布局方法,其特征在于, 所述預(yù)設(shè)方向為向上或向下時,所述步驟C3之后還包括: C6、若所記下的頂點有多個時,判斷多個頂點是否屬于同一平面包圍盒:若是,則保留所述多個頂點中的一個頂點,將該頂點對應(yīng)的模型標記為基準模型的預(yù)設(shè)方向鄰居;否則轉(zhuǎn)向步驟C7 ; C7、比較各個頂點對應(yīng)的X值,取最小X值對應(yīng)的頂點,并將該頂點對應(yīng)的模型標記為基準模型的上或下鄰居。
10.一種3D模型的自動布局方法的系統(tǒng),其特征在于,包括: 場景構(gòu)建模塊,用于構(gòu)建3D場景、解析3D文件獲得引擎數(shù)據(jù),基于所述引擎數(shù)據(jù)進行渲染,其中所述引擎數(shù)據(jù)包括模型及攝像機的位置; 過濾模塊,用于根據(jù)所 述模型與攝像機的位置過濾所述3D場景中相對于所述攝像機無效的模型; 鄰居計算模塊,用于基于過濾后所保留的模型,以其中任一模型為基準,計算出在預(yù)設(shè)方向的鄰居模型,并標記所述鄰居模型; 布局模塊,用于將所標記的模型組成布局。
【文檔編號】G06T17/00GK103617317SQ201310605070
【公開日】2014年3月5日 申請日期:2013年11月26日 優(yōu)先權(quán)日:2013年11月26日
【發(fā)明者】秦龍龍, 盧偉超, 張穎 申請人:Tcl集團股份有限公司