一種 2.5d下模型添加及排序的方法
【專利摘要】一種2.5D下模型添加及排序的方法,包括如下步驟:在2.5場景中,任意選擇其中一個模型作為參考模型,獲取參考模型在2.5D場景坐標(biāo)系中的空間位置,用矩陣M1表示;從模型庫中選擇一個將要被添加到2.5D場景的模型作為移動模型;調(diào)整移動模型在參考模型頂視圖和前視圖中的相對位置;獲取移動模型在參考模型坐標(biāo)系中的空間位置;得到移動模型的在2.5D場景坐標(biāo)系中的空間位置;通過2.5D場景中的相機(jī)距離2.5D場景中任意兩個模型之間距離判斷任意兩個模型在顯示上的疊加關(guān)系;通過疊加關(guān)系進(jìn)行排序。通過本發(fā)明,引入?yún)⒖寄P偷母拍睿瑥亩鉀Q了模型的精確擺放問題;通過本發(fā)明的排序方法,解決了模型疊加擺放產(chǎn)生的排序問題,使得可以任意擺放2.5D模型在場景中的位置。
【專利說明】一種2.5D下模型添加及排序的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及三維模型的【技術(shù)領(lǐng)域】,具體涉及一種2.5D下模型添加及排序的方法。
【背景技術(shù)】
[0002]現(xiàn)有的軟件技術(shù)中,允許用戶自由擺放2.5D模型的2.5D技術(shù)方案大多采用修改三維坐標(biāo)(x,y,z)的方式,該方式存在不直觀、不精確的技術(shù)缺陷,具體原因是由于模型的任意位置擺放導(dǎo)致2.5D場景排序出錯,從而導(dǎo)致顯示混亂,故此現(xiàn)有技術(shù)中大多應(yīng)用都禁止了這項功能;
[0003]現(xiàn)有技術(shù)中,由于2.固定視角的先天缺陷,導(dǎo)致了直接更改2.模型的三維坐標(biāo)(X,y, Z)的方式不直觀,很難查看新添加模型相對其附近的模型的位置關(guān)系,因此很難放置準(zhǔn)確,如若放置不妥則有可能會導(dǎo)致不同模型采用了相同的三維坐標(biāo);同時用戶自己擺放物品后會存在模型位置疊加,導(dǎo)致2.場景整體渲染順序出錯,故此大部分的2.設(shè)計軟件都不提倡用戶隨意擺放模型,設(shè)置關(guān)閉了這項功能。
[0004]然而自由擺放模型,對于用戶而言,卻能夠直觀的進(jìn)行整體移動、旋轉(zhuǎn)、刪除等操作,將會大幅度的提高用戶的體驗,提高操作效率,故此急需一種新型的技術(shù)方案來解決該冋題。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的是提供一種2.5D下模型添加及排序的方法,以克服現(xiàn)有技術(shù)存在的上述不足。
[0006]本發(fā)明的目的是通過以下技術(shù)方案來實現(xiàn)的:
[0007]一種2.5D下模型添加及排序的方法,包括如下步驟:
[0008]S11,在2.場景中,包括若干模型,每個所述模型的空間位置用一個矩陣表示;
[0009]S12,在所述2.5場景中,任意選擇其中一個模型作為參考模型,獲取所述參考模型在所述2.5D場景坐標(biāo)系中的空間位置,用矩陣Ml表示;
[0010]S13,從模型庫中選擇一個將要被添加到所述2.場景的模型作為移動模型;調(diào)整所述移動模型在所述參考模型頂視圖和前視圖中的相對位置;獲取所述移動模型在所述參考模型坐標(biāo)系中的空間位置,用矩陣M2表示;
[0011]S14,通過Ml和M2,得到所述移動模型的在所述2.場景坐標(biāo)系中的空間位置,用矩陣M3表示;M3 = M1XM2 ;
[0012]S15,通過所述2.場景中的相機(jī)距離所述2.場景中任意兩個模型之間距離判斷任意兩個t旲型在顯不上的萱加關(guān)系;
[0013]S16,通過所述疊加關(guān)系進(jìn)行排序。
[0014]優(yōu)選的,所述移動模型在所述參考模型的頂視圖和前視圖中添加。
[0015]優(yōu)選的,Ml、M2、M3矩陣分別為一個三維矩陣;所述三維矩陣中包含所屬模型的縮放、旋轉(zhuǎn)和移動信息。
[0016]優(yōu)選的,S15中,任意兩個模型分別為模型A和模型B ;
[0017]若所述模型A覆蓋在所述模型B上,則從所述模型A到所述模型B形成第一個有向邊,若所述模型B覆蓋在所述模型A上,則從所述模型B到所述模型A形成第二個有向邊;依此類推,由兩兩相鄰的所有模型之間的疊加關(guān)系形成的有向邊構(gòu)成一張有向圖;所述有向圖包含一個以上環(huán);
[0018]S16中,通過所述疊加關(guān)系進(jìn)行排序的具體實現(xiàn)方法為:
[0019]S41,搜索若所述有向圖的環(huán),若搜索到環(huán),則刪除搜索到的環(huán)中的任意一條有向邊;重復(fù)搜索環(huán)與刪除搜索到的環(huán)中的任意一條有向邊的過程,直至所述有向圖中沒有環(huán),形成有向無環(huán)圖;
[0020]S42,對所述有向無環(huán)圖進(jìn)行拓?fù)渑判颍雠判蚝蟮慕Y(jié)果作為所述2.場景中所有模型的顯示順序。
[0021]更加優(yōu)選的,所述有向圖包括一個以上環(huán),環(huán)的確定方法具體為:若存在η個模型分別為[Al, Α2,----,An], η> = 2 ;對于任意i,1< = i< = n_l ;Ai到Ai+1有一條有向邊,
且An到Al有一條有向邊,則η個模型和η條首尾相連的有向邊形成了一個環(huán)。
[0022]更加優(yōu)選的,對刪除環(huán)的有向圖進(jìn)行拓?fù)渑判虻姆椒ň唧w為:
[0023]S61,獲取所述2.5D場景中的模型的入度;
[0024]S62,遍歷所述2.場景中的所有模型,找到入度為O的模型,作為臨界模型;輸出所述臨界模型,刪除所述臨界模型以及所有以所述臨界模型為起點的有向邊;
[0025]S63,重復(fù)S61-S62,直到所有的模型和所有的有向邊均被刪除為止;
[0026]S64,所述2.5D場景中的所有模型作為所述臨界模型模型被輸出的順序作為模型的拓?fù)漤樞颉?br>
[0027]更加優(yōu)選的,S61,獲取所述2.5D場景中的模型的入度的方法具體為:
[0028]所述2.5D場景中的模型的入度具體為指向所述拓?fù)淠P偷挠邢蜻叺膫€數(shù);
[0029]若有一條有向邊從所述模型A指向所述模型B,則所述模型B的入度值+1 ;
[0030]遍歷所有的有向邊,得到每個模型的入度值。
[0031]參考坐標(biāo)具體為所述參考模型頂視圖的三維坐標(biāo)和所述參考模型主視圖的三維坐標(biāo)共同作為參考坐標(biāo);
[0032]其他模型指若干模型中除去參考模型之外的模型;
[0033]術(shù)語解釋:
[0034]2.5D模型疊加:2.5D模型任意位置的擺放,允許模型間包圍盒或包圍球交叉。
[0035]2.5D場景排序:想讓2.5D場景中的2.5D模型正確顯示,需要對2.5D模型渲染按順序進(jìn)行排序,一般根據(jù)物體的包圍盒或包圍球體和物體的位置信息、相機(jī)位置信息得到物體兩兩之間的遮擋關(guān)系,形成一個有向圖,對這個有向圖進(jìn)行拓?fù)渑判?,就可以得到所?.模型的渲染順序。
[0036]入度:入度是圖論算法中重要的概念之一。它通常指有向圖中某點作為圖中邊的終點的次數(shù)之和。
[0037]拓?fù)渑判?對一個有向無環(huán)圖(Directed Acyclic Graph簡稱DAG)G進(jìn)行拓?fù)渑判颍菍中所有頂點排成一個線性序列,使得圖中任意一對頂點u和V,若邊(U,V) eE(G),則u在線性序列中出現(xiàn)在V之前。通常,這樣的線性序列稱為滿足拓?fù)浯涡?Topological Order)的序列,簡稱拓?fù)湫蛄小:唵蔚恼f,由某個集合上的一個偏序得到該集合上的一個全序,這個操作稱之為拓?fù)渑判颉?br>
[0038]本發(fā)明的有益效果為:
[0039]通過本發(fā)明,引入?yún)⒖寄P偷母拍?,從而賦予模型以相對坐標(biāo),從而解決了模型的精確擺放問題;同時參考模型和被添加模型形成了一種一對多的“父子”關(guān)系,可對這組模型進(jìn)行整體移動、旋轉(zhuǎn)、刪除等操作,提高操作效率;通過本發(fā)明創(chuàng)新性的排序方法,解決了模型疊加擺放產(chǎn)生的排序問題,使得可以任意擺放2.模型在場景中的位置。
【專利附圖】
【附圖說明】
[0040]圖1為本發(fā)明的流程結(jié)構(gòu)示意圖;
[0041]圖2為本發(fā)明拓?fù)渑判蛟贏OV-網(wǎng)及其拓?fù)溆行蛐蛄挟a(chǎn)生的過程示意圖。
【具體實施方式】
[0042]如圖1所示,本發(fā)明采用2.技術(shù)、三維矩陣運算、有向圖查找環(huán)算法、拓?fù)渑判蛩惴?
[0043]一種2.5D下模型添加及排序的方法,包括如下步驟:
[0044]S11,在2.場景中,包括若干模型,每個模型的空間位置用一個矩陣表示;
[0045]S12,在2.5場景中,任意選擇其中一個模型作為參考模型,獲取參考模型在2.5D場景坐標(biāo)系中的空間位置,用矩陣Ml表示;
[0046]S13,從模型庫中選擇一個將要被添加到2.5D場景的模型作為移動模型;調(diào)整所述移動模型在所述參考模型頂視圖和前視圖中的相對位置;獲取移動模型在參考模型坐標(biāo)系中的空間位置,用矩陣M2表示;
[0047]S14,通過Ml和M2,得到移動模型的在2.5D場景坐標(biāo)系中的空間位置,用矩陣M3表示;M3 = Ml X M2 ;
[0048]S15,通過2.場景中的相機(jī)距離2.場景中任意兩個模型之間距離判斷任意兩個豐旲型在顯不上的萱加關(guān)系;
[0049]S16,通過疊加關(guān)系進(jìn)行排序。
[0050]在以上步驟中,所述移動模型在所述參考模型的頂視圖和前視圖中添加;M1、M2、M3矩陣分別為一個三維矩陣;三維矩陣中包含所屬模型的縮放、旋轉(zhuǎn)和移動信息。
[0051]在S15中,任意兩個模型分別為模型A和模型B ;
[0052]若模型A覆蓋在模型B上,則從模型A到模型B形成第一個有向邊,若模型B覆蓋在模型A上,則從模型B到模型A形成第二個有向邊;依此類推,由模型A與模型B的疊加關(guān)系形成的有向邊構(gòu)成一張有向圖;有向圖可能包括一個或一個以上環(huán);
[0053]在S16中,通過疊加關(guān)系進(jìn)行排序的具體實現(xiàn)方法為:
[0054]S41,搜索若所述有向圖的環(huán),若搜索到環(huán)則刪除環(huán)中的任意一條有向邊;重復(fù)以上過程,直至有向圖中沒有環(huán),形成有向無環(huán)圖;
[0055]S42,對有向無環(huán)圖進(jìn)行拓?fù)渑判?,排序后的結(jié)果作為2.場景中所有模型的顯示順序。
[0056]有向圖包括一個以上環(huán),環(huán)的確定方法具體為:若存在η個模型分別為[Al, A2,...., An], n> = 2 ;對于任意 i,1〈 = i< = n_l ;Ai 到 Ai+1 有一條有向邊,且 An 到Al有一條有向邊,則η個模型和η條首尾相連的有向邊形成了一個環(huán)。
[0057]進(jìn)一步的,對刪除環(huán)的有向無環(huán)圖進(jìn)行拓?fù)渑判虻姆椒ň唧w為:
[0058]S61,獲取2.5D場景中的模型的入度;
[0059]S62,遍歷2.場景中的所有模型,找到入度為O的模型,作為臨界模型;輸出臨界模型,刪除臨界模型以及所有以臨界模型為起點的有向邊;
[0060]S63,重復(fù)S61-S62,直到所有的模型和有向邊均被刪除為止;
[0061]S64,2.5D場景中的所有模型作為臨界模型模型被輸出的順序作為模型的拓?fù)漤樞颉?br>
[0062]在S61中,獲取2.5D場景中的模型的入度的方法具體為:
[0063]2.5D場景中的模型的入度具體為指向拓?fù)淠P偷挠邢蜻叺膫€數(shù);
[0064]若有一條有向邊從模型A指向模型B,則模型B的入度值+1 ;
[0065]遍歷所有的有向邊,得到每個模型的入度值。
[0066]如圖2所示的AOV-網(wǎng)及其拓?fù)溆行蛐蛄挟a(chǎn)生的過程,(a)AOV-網(wǎng);(b)輸出v6之后;(C)輸出vl之后;(d)輸出v4之后;(e)輸出v3之后;(f)輸出v2之后,通過該方法,逐級進(jìn)行排序,實現(xiàn)了拓?fù)渑判颉?br>
[0067]本技術(shù)方案在疊加2.5D模型時,使用了參照模型,在參照模型的頂視圖和前視圖中調(diào)整新添加2.5D模型的位置,用直觀拖動的方式而非抽象的調(diào)整數(shù)字的放置。同時針對
2.模型疊加后的排序顯示錯誤進(jìn)行改進(jìn),有效避免了模型疊加情況下的排序錯誤。該模型添加和排序方法可以任意擺放2.模型在場景中的位置,操作直觀、精確;同時參考模型和被添加模型形成了一種一對多的“父子”關(guān)系,可以這組模型進(jìn)行整體移動、旋轉(zhuǎn)、刪除等操作,提高操作效率。2.模型擺放更加直觀、方便、精確;2.場景排序更加精確、容錯性更大,降低名疊加帶來的排序混亂概率。
[0068]以上通過具體的和優(yōu)選的實施例詳細(xì)的描述了本發(fā)明,但本領(lǐng)域技術(shù)人員應(yīng)該明白,本發(fā)明并不局限于以上所述實施例,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種2.5D下模型添加及排序的方法,其特征在于,包括如下步驟: S11,在2.場景中,包括若干模型,每個所述模型的空間位置用一個矩陣表示; S12,在所述2.5場景中,任意選擇其中一個模型作為參考模型,獲取所述參考模型在所述2.場景坐標(biāo)系中的空間位置,用矩陣Ml表示; S13,從模型庫中選擇一個將要被添加到所述2.5D場景的模型作為移動模型;調(diào)整所述移動模型在所述參考模型頂視圖和前視圖中的相對位置;獲取調(diào)整后的所述移動模型在所述參考模型坐標(biāo)系中的空間位置,用矩陣M2表示; S14,通過Ml和M2,得到所述移動模型的在所述2.場景坐標(biāo)系中的空間位置,用矩陣M3 表示;M3 = Ml X M2 ; S15,通過所述2.場景中的相機(jī)距離所述2.場景中任意兩個模型之間距離判斷任意兩個t旲型在顯不上的萱加關(guān)系; S16,通過所述疊加關(guān)系進(jìn)行排序。
2.根據(jù)權(quán)利要求1所述的2.5D下模型添加及排序的方法,其特征在于:所述移動模型添加在所述參考模型的頂視圖和前視圖中。
3.根據(jù)權(quán)利要求1所述的2.5D下模型添加及排序的方法,其特征在于:M1、M2、M3矩陣分別為一個三維矩陣;所述三維矩陣中包含所屬模型的縮放、旋轉(zhuǎn)和移動信息。
4.根據(jù)權(quán)利要求1所述的2.5D下模型添加及排序的方法,其特征在于: S15中,任意兩個模型分別為模型A和模型B ; 若所述模型A覆蓋在所述模型B上,則從所述模型A到所述模型B形成第一個有向邊,若所述模型B覆蓋在所述模型A上,則從所述模型B到所述模型 A形成第二個有向邊;依此類推,由兩兩相鄰的所有模型之間的疊加關(guān)系形成的有向邊構(gòu)成一張有向圖;所述有向圖包含一個以上環(huán); S16中,通過所述疊加關(guān)系進(jìn)行排序的具體實現(xiàn)方法為: S41,搜索所述有向圖的環(huán),若搜索到環(huán),則刪除搜索到的環(huán)中的任意一條有向邊;重復(fù)搜索環(huán)與刪除搜索到的環(huán)中的任意一條有向邊的過程,直至所述有向圖中沒有環(huán),形成有向無環(huán)圖; S42,對所述有向無環(huán)圖進(jìn)行拓?fù)渑判颍雠判蚝蟮慕Y(jié)果作為所述2.場景中所有模型的顯示順序。
5.根據(jù)權(quán)利要求4所述的2.5D下模型添加及排序的方法,其特征在于: 所述有向圖包括一個以上環(huán),環(huán)的確定方法具體為:若存在η個模型分別為[Al, Α2,...., An], η> = 2 ;對于任意 i,1〈 = i< = η-1 ;Ai 到 Ai+1 有一條有向邊,且 An 到Al有一條有向邊,則η個模型和η條首尾相連的有向邊形成了一個環(huán)。
6.根據(jù)權(quán)利要求4所述的2.5D下模型添加及排序的方法,其特征在于,對有向無環(huán)圖進(jìn)行拓?fù)渑判虻姆椒ň唧w為: S61,獲取所述2.場景中的模型的入度; S62,遍歷所述2.場景中的所有模型,找到入度為O的模型,作為臨界模型;輸出所述臨界模型,刪除所述臨界模型以及所有以所述臨界模型為起點的有向邊; S63,重復(fù)S61-S62,直到所有的模型和所有的有向邊均被刪除為止; S64,所述2.5D場景中的所有模型作為所述臨界模型模型被輸出的順序作為模型的拓?fù)漤樞颉?br>
7.根據(jù)權(quán)利要求6所述的2.5D下模型添加及排序的方法,其特征在于,S61,獲取所述.2.5D場景中的模型的入度的方法具體為: 所述2.5D場景中的模型的入度具體為指向所述拓?fù)淠P偷挠邢蜻叺膫€數(shù); 若有一條有向邊從所述模型A指向所述模型B,則所述模型B的入度值+1 ; 遍歷所有的有向邊,得到每個模型的入度值。
【文檔編號】G06F17/50GK104504206SQ201410830473
【公開日】2015年4月8日 申請日期:2014年12月22日 優(yōu)先權(quán)日:2014年12月22日
【發(fā)明者】黃尤江, 李松松 申請人:上海愛福窩云技術(shù)有限公司