本發(fā)明屬于建模設計領域,具體地說,涉及一種基于旋轉角度模型庫的3D模型旋轉角度自匹配系統(tǒng)及方法。
背景技術:
隨著人們追求更加逼真的虛擬現(xiàn)實的體驗欲望的強烈,3D的虛擬現(xiàn)實技術也隨之普及。但在現(xiàn)有的居室3D模型建模技術中,常常涉及對家具的安裝或旋轉等操作,這些操作都需要人工介入對其設置旋轉角度,但人為設置旋轉角度的既不方便也不準確,因此大大增加了用戶對3D建模的操作成本。
技術實現(xiàn)要素:
1、要解決的問題
針對現(xiàn)有居室3D模型建模時人工介入設置家具旋轉角度困難且不準確的問題,本發(fā)明提供一種基于旋轉角度模型庫的3D模型旋轉角度自匹配系統(tǒng),以及根據(jù)該系統(tǒng)進行3D模型旋轉角度自匹配的方法,能有效降低3D建模難度,提高3D建模中3D模型旋轉角度的精度。
2、技術方案
為解決上述問題,本發(fā)明采用如下的技術方案。
一種基于旋轉角度模型庫的3D模型旋轉角度自匹配系統(tǒng),包括3D模型建立器、旋轉角度模型庫建立器、3D模型旋轉角度計算器、3D模型節(jié)點坐標計算器和3D模型渲染器;所述的3D模型建立器與所述的3D模型旋轉角度計算器單向連接;所述的3D模型旋轉角度計算器與所述的3D模型節(jié)點坐標計算器單向連接;所述的3D模型節(jié)點坐標計算器與所述的3D模型建立器雙向連接;所述的3D模型建立器與所述的3D模型渲染器單向連接;所述的旋轉角度模型庫建立器與所述的3D模型旋轉角度計算器單向連接。
優(yōu)選地,所述的3D模型建立器用于記錄3D模型的對象信息。
優(yōu)選地,所述的對象信息包括3D模型各節(jié)點的坐標、3D模型的OBB包圍盒的偏移角度和3D模型的OBB包圍盒中的旋轉參考點坐標。
一種基于旋轉角度模型庫的3D模型旋轉角度自匹配方法,包括如下步驟:
步驟1.初始化3D模型的對象信息;通過3D模型建立器將所述的對象信息分別傳輸給3D模型旋轉角度計算器和3D模型節(jié)點坐標計算器;
步驟2.計算各參考面的角度;通過旋轉角度模型庫建立器將所述的參考面的角度傳遞給所述的3D模型旋轉角度計算器;
步驟3.計算3D模型旋轉角度;包括依附參考面的3D模型旋轉角度的計算和脫離參考面的3D模型旋轉角度的計算;通過3D模型旋轉角度計算器將所述的3D模型旋轉角度傳輸給3D模型節(jié)點坐標計算器;
步驟4.旋轉3D模型;以所述的對象信息中的所述的參考點坐標為中心對所述的3D模型各節(jié)點坐標按步驟3中所述的3D模型旋轉角度進行旋轉;將旋轉后的3D模型的對象信息傳輸給所述的3D模型建立器,由所述的3D模型建立器更新對應的3D模型的對象信息;
步驟5.繪制3D模型;3D模型渲染器從3D模型建立器中獲取步驟4中經(jīng)更新后的3D模型的對象信息,并根據(jù)該對象信息繪制3D模型。
優(yōu)選地,步驟1中所述的對象信息包括:3D模型各節(jié)點的坐標、3D模型的OBB包圍盒的偏移角度和3D模型的OBB包圍盒中的旋轉參考點坐標。
優(yōu)選地,所述的OBB包圍盒的偏移角度的獲取方法是:根據(jù)所述的3D模型各節(jié)點坐標測量得出OBB包圍盒的各節(jié)點坐標,再將OBB包圍盒背面各節(jié)點坐標向地面進行投影以形成投影線段,測量此線段在地面上所形成的角度記錄為所述的3D模型的OBB包圍盒的偏移角度。
優(yōu)選地,步驟2中首先通過旋轉角度模型庫建立器獲取參考面上各節(jié)點的坐標,再向地面進行垂直投影以形成投影線段,記錄此投影線段在地面上所形成的角度得到參考面的角度。
優(yōu)選地,步驟3中所述的依附參考面的3D模型旋轉角度的獲取方法是:通過3D模型旋轉角度計算器提取所述的對象信息中的3D模型的OBB包圍盒的偏移角度、提取步驟2中所述的參考面的角度中目標參考面的角度;并將所述的目標參考面的角度減去所述的3D模型的OBB包圍盒的偏移角度所得差值記錄為所述的3D模型旋轉角度;所述的目標參考面是3D模型所要依附的參考面。
優(yōu)選地,步驟3中所述的脫離參考面的3D模型旋轉角度的獲取方法是:通過3D模型旋轉角度計算器提取所述的對象信息中的所述的OBB包圍盒的偏移角度;將所述的各參考面的角度逐個減去所述的OBB包圍盒的偏移角度所得差值記錄為角度組angle_group_1;再將所述的角度組angle_group_1中的角度挨個加上90度后形成垂直于所述的角度組angle_group_1的角度組angle_group_2;然后對所述的角度組angle_group_1和所述的角度組angle_group_2中的所有角度分別重新映射為從0度到360度之間范圍的角度,得到角度組angle_group_3;再將所述的角度組angle_group_3按角度值以升序或降序進行重新排序,形成角度組angle_group_4;取角度組angle_group_4中的大于0的最小角度值記錄為3D模型的旋轉角度。
3、有益效果
相比于現(xiàn)有技術,本發(fā)明的有益效果為:
(1)本發(fā)明提供了旋轉角度模型庫建立器和3D模型旋轉角度計算器,即發(fā)明了一種根據(jù)參考面自動建立旋轉角度模型庫,并基于已建立的旋轉角度模型庫自動匹配需要旋轉的角度的方法,最終得到3D模型的OBB包圍盒的背面平行于參考面或者垂直于參考面,其旋轉角度都是系統(tǒng)自動計算,不再需要人工參與設置,解決了現(xiàn)有建模技術中3D模型旋轉角度都需要人工設置的問題;
(2)本發(fā)明在居室3D模型中對家具3D模型安裝或旋轉時,其根據(jù)已建立的旋轉角度模型庫自動匹配需要旋轉的角度的方法,整個角度旋轉過程不再需要人工設置角度,通過這種角度自動匹配的方法得到的旋轉角度精度非常高,解決了3D模型旋轉角度不精確的問題。
附圖說明
圖1為本發(fā)明的3D模型角度旋轉示意圖;
圖中:1、地面;2、參考面;3、在參考面外側移動;4、在參考面內側移動;5、脫離參考面旋轉;6、OBB包圍盒背面。
圖2為本發(fā)明系統(tǒng)各模塊連接關系圖;
圖3為本發(fā)明的算法流程圖。
具體實施方式
下面結合附圖對本發(fā)明進行詳細描述。
一種基于旋轉角度模型庫的3D模型旋轉角度自匹配系統(tǒng),包括3D模型建立器、旋轉角度模型庫建立器、3D模型旋轉角度計算器、3D模型節(jié)點坐標計算器和3D模型渲染器;
如圖2所示,所述的3D模型建立器與所述的3D模型旋轉角度計算器單向連接;所述的3D模型旋轉角度計算器與所述的3D模型節(jié)點坐標計算器單向連接;所述的3D模型節(jié)點坐標計算器與所述的3D模型建立器雙向連接;所述的3D模型建立器與所述的3D模型渲染器單向連接;所述的旋轉角度模型庫建立器與所述的3D模型旋轉角度計算器單向連接;
所述的3D模型建立器是一種如下模塊:用于記錄3D模型的對象信息,對象信息包括:3D模型各節(jié)點的坐標、3D模型的OBB包圍盒的偏移角度和3D模型的OBB包圍盒中的旋轉參考點坐標;并將此對象的相關信息分別傳輸給3D模型旋轉角度計算器,再經(jīng)3D模型旋轉角度計算器傳輸給3D模型節(jié)點坐標計算器;
所述的旋轉角度模型庫建立器是一種如下模塊:用于收集各參考面的節(jié)點坐標,并根據(jù)節(jié)點坐標計算各參考面的角度,并將各參考面的角度傳輸給3D模型旋轉角度計算器;所謂參考面就是垂直于地面的面;如圖1展示了一種垂直于地面1的參考面2的情況;
所述的3D模型旋轉角度計算器是一種如下模塊:根據(jù)從旋轉角度模型庫建立器中獲取的各參考面的角度以及從3D模型建立器中獲取的3D模型的OBB包圍盒的偏移角度計算3D模型所需的旋轉角度,并將此3D模型的旋轉角度以及3D模型的對象信息一并傳輸給3D模型節(jié)點坐標計算器;
所述的3D模型節(jié)點坐標計算器是一種如下模塊:根據(jù)從3D模型旋轉角度計算器中獲取3D模型所需的旋轉角度以及從3D模型建立器中獲取3D模型信息計算旋轉后的3D模型各節(jié)點的坐標;并將計算后的節(jié)點坐標傳輸給3D模型建立器,以更新對應的3D模型的對象信息;
所述的3D模型渲染器是一種如下模塊:根據(jù)從3D模型建立器獲取3D模型對象信息對3D模型進行繪制。
一種基于旋轉角度模型庫的3D模型旋轉角度自匹配方法,如圖3所示,包括如下步驟:
步驟1.初始化3D模型的對象信息;
所述的3D模型的對象信息記錄在所述的3D模型建立器中;
所述的3D模型的對象信息包括:3D模型各節(jié)點的坐標、3D模型的OBB包圍盒的偏移角度和3D模型的OBB包圍盒中的旋轉參考點坐標;
所述的3D模型建立器將所述的對象信息分別傳輸給3D模型旋轉角度計算器和3D模型節(jié)點坐標計算器;
3D模型各節(jié)點的坐標可以在3D模型被加載時直接讀取,其各節(jié)點的坐標可以但不限于數(shù)組或鏈表存儲;
OBB包圍盒的偏移角度的獲取方法:根據(jù)所述的3D模型各節(jié)點坐標測量得出OBB包圍盒的各節(jié)點坐標,再將OBB包圍盒背面各節(jié)點坐標向地面進行投影以形成投影線段,測量此線段在地面上所形成的角度記錄為所述的3D模型的OBB包圍盒的偏移角度;如圖1展示了OBB包圍盒背面6的位置;
步驟2.計算各參考面的角度;
具體操作方法是首先通過旋轉角度模型庫建立器獲取參考面上各節(jié)點的坐標,再向地面進行垂直投影以形成投影線段,記錄此投影線段在地面上所形成的角度得到參考面的角度;
所述的旋轉角度模型庫建立器將所述的參考面的角度傳遞給所述的3D模型旋轉角度計算器;
步驟3.計算3D模型旋轉角度;
如圖1所示,3D模型旋轉角度的計算包括依附參考面旋轉(包括在參考面外側移動3和在參考面內側移動4)和脫離參考面旋轉5兩種情況;對于依附參考面的3D模型的旋轉角度與脫離參考面的3D模型的旋轉角度的計算方案是不一樣的,具體如下:
依附參考面的3D模型旋轉角度的獲得:所述的3D模型旋轉角度計算器接收步驟1中來自所述的3D模型建立器中的所述的3D模型的對象信息、接收步驟2中來自所述的旋轉角度模型庫建立器中的所述的參考面的角度;提取所述的3D模型的對象信息中的所述的3D模型的OBB包圍盒的偏移角度、提取所述的參考面的角度中目標參考面的角度;并將所述的目標參考面的角度減去所述的3D模型的OBB包圍盒的偏移角度所得差值記錄為所述的3D模型旋轉角度;
所述的目標參考面是3D模型所要依附的參考面;
3D模型可以依賴于參考面的內側也可以依賴參考面的外面,但不管是處于如圖1所示的在參考面外側移動3的情況,還是處于在參考面內側移動4的情況,其3D模型旋轉角度的獲取方法是相同的;
脫離參考面的3D模型旋轉角度的獲得:從所述的旋轉角度模型庫建立器中獲取的各參考面的角度以及從所述的3D模型建立器中獲取所述的3D模型的對象信息,提取所述的3D模型的對象信息中的所述的OBB包圍盒的偏移角度;將所述的各參考面的角度逐個減去所述的OBB包圍盒的偏移角度所得差值記錄為角度組angle_group_1;再將所述的角度組angle_group_1中的角度挨個加上90度后形成垂直于所述的角度組angle_group_1的角度組angle_group_2;然后對所述的角度組angle_group_1和所述的角度組angle_group_2中的所有角度分別重新映射為從0度到360度之間范圍的角度(此范圍角度包括0度但不包括360度),得到角度組angle_group_3;再將所述的角度組angle_group_3按角度值以升序或降序進行重新排序,形成角度組angle_group_4;取角度組angle_group_4中的大于0的最小角度值記錄為3D模型的旋轉角度;
將上述所得3D模型的旋轉角度以及所述的3D模型的對象信息一并傳輸給3D模型節(jié)點坐標計算器;
步驟4.旋轉3D模型;
從所述的3D模型旋轉角度計算器獲取步驟3中所得3D模型的旋轉角度以及所述的3D模型的對象信息,以所述的3D模型的對象信息中的所述的參考點坐標為中心對所述的3D模型各節(jié)點坐標按步驟3中所述的3D模型旋轉角度進行旋轉(其旋轉后的角度為3D模型旋轉前的角度加上其已旋轉的角度);最后將旋轉后的3D模型的對象信息傳輸給所述的3D模型建立器,由所述的3D模型建立器更新對應的3D模型的對象信息;
步驟5.繪制3D模型;
3D模型渲染器從3D模型建立器中獲取步驟4中經(jīng)更新后的3D模型的對象信息,并根據(jù)該對象信息繪制3D模型。
下面結合具體實施例對本發(fā)明進一步進行描述。
實施例1
本實施例以對墻上的空調掛機的安裝為說明。
一種基于旋轉角度模型庫的3D模型旋轉角度自匹配方法,包括如下步驟:
步驟1.初始化3D模型的對象信息;通過3D模型建立器將所述的對象信息分別傳輸給3D模型旋轉角度計算器和3D模型節(jié)點坐標計算器;
步驟2.計算各參考面的角度;
具體操作方法是首先通過所述的3D模型建立器獲取房間內各墻面上各節(jié)點的坐標,再將墻面上各節(jié)點的坐標向地面進行垂直投影以形成投影線段,記錄此投影線段在地面上所形成的角度得到參考面的角度;
所述的3D模型建立器記錄上述步驟得到的參考面的角度,并將所述的參考面的角度傳遞給所述的3D模型旋轉角度計算器;
步驟3.計算3D模型旋轉角度;
空調掛機屬于依附參考面的3D模型,依附參考面的3D模型旋轉角度的獲得:從旋轉角度模型庫建立器中獲取的各參考面的角度以及從3D模型建立器中獲取的空調掛機的3D模型的對象信息,并從此3D模型的對象信息中獲取OBB包圍盒的偏移角度,目標墻面的角度減去空調掛機的3D模型的OBB包圍盒的偏移角度即為3D模型的旋轉角度;所謂目標參考面就是3D模型將要被依附的參考面。
將此空調掛機的3D模型的旋轉角度以及3D模型的對象信息一并傳輸給3D模型節(jié)點坐標計算器;
步驟4.旋轉3D模型;
從所述的3D模型旋轉角度計算器獲取步驟3中所得空調掛機的3D模型的旋轉角度以及空調掛機的3D模型的對象信息,以所述的3D模型的對象信息中的所述的參考節(jié)點坐標為中心對所述的3D模型各節(jié)點坐標按步驟3中所述的3D模型旋轉角度進行旋轉(其旋轉后的角度為3D模型旋轉前的角度加上其已旋轉的角度);最后將旋轉后的3D模型的對象信息傳輸給所述的3D模型建立器,由所述的3D模型建立器更新對應的3D模型的對象信息;
步驟5.繪制3D模型;
3D模型渲染器從3D模型建立器中獲取步驟4中經(jīng)更新后的空調掛機的3D模型的對象信息,并根據(jù)該對象信息繪制空調掛機的3D模型。
實施例2
本實施例以對吊頂?shù)氖嗑€安裝為說明,假設吊頂?shù)男螤顬槲褰切恰?/p>
一種基于旋轉角度模型庫的3D模型旋轉角度自匹配方法,包括如下步驟:
步驟1.初始化3D模型的對象信息;通過3D模型建立器將所述的對象信息分別傳輸給3D模型旋轉角度計算器和3D模型節(jié)點坐標計算器;
步驟2.計算各參考面的角度;
具體操作方法是首先通過所述的3D模型建立器獲取形成吊頂?shù)奈褰切嵌噙呅紊细鞴?jié)點的坐標,再將形成吊頂?shù)奈褰切嵌噙呅紊细鞴?jié)點的坐標向地面進行垂直投影以形成投影線段,記錄此投影線段在地面上所形成的角度得到參考面的角度;
所述的3D模型建立器記錄上述步驟得到的參考面的角度,并將所述的參考面的角度傳遞給所述的3D模型旋轉角度計算器;
計算3D模型旋轉角度;
石膏線屬于依附參考面的3D模型,依附參考面的3D模型旋轉角度的獲得:從旋轉角度模型庫建立器中獲取的各參考面的角度以及從3D模型建立器中獲取的石膏線的3D模型的對象信息,并從此3D模型的對象信息中獲取OBB包圍盒的偏移角度,目標吊頂多邊形對應的邊的角度減去石膏線的3D模型的OBB包圍盒的偏移角度即為3D模型的旋轉角度;所謂目標參考面就是3D模型將要被依附的參考面。
將此石膏線的3D模型的旋轉角度以及3D模型的對象信息一并傳輸給3D模型節(jié)點坐標計算器;
步驟4.旋轉3D模型;
從所述的3D模型旋轉角度計算器獲取步驟3中所得石膏線的3D模型的旋轉角度以及石膏線的3D模型的對象信息,以所述的3D模型的對象信息中的所述的參考節(jié)點坐標為中心對所述的3D模型各節(jié)點坐標按步驟3中所述的3D模型旋轉角度進行旋轉(其旋轉后的角度為3D模型旋轉前的角度加上其已旋轉的角度);最后將旋轉后的3D模型的對象信息傳輸給所述的3D模型建立器,由所述的3D模型建立器更新對應的3D模型的對象信息;
步驟5.繪制3D模型;
3D模型渲染器從3D模型建立器中獲取步驟4中經(jīng)更新后的石膏線的3D模型的對象信息,并根據(jù)該對象信息繪制石膏線的3D模型。
實施例3
本實施例以對餐桌的旋轉為說明。
一種基于旋轉角度模型庫的3D模型旋轉角度自匹配方法,包括如下步驟:
步驟1.初始化3D模型的對象信息;通過3D模型建立器將所述的對象信息分別傳輸給3D模型旋轉角度計算器和3D模型節(jié)點坐標計算器;
步驟2.計算各參考面的角度;
具體操作方法是首先通過所述的3D模型建立器獲取房間內各墻面上各節(jié)點的坐標,再將墻面上各節(jié)點的坐標向地面進行垂直投影以形成投影線段,記錄此投影線段在地面上所形成的角度得到參考面的角度;
所述的3D模型建立器記錄上述步驟得到的參考面的角度,并將所述的參考面的角度傳遞給所述的3D模型旋轉角度計算器;
步驟3.計算3D模型旋轉角度;
餐桌屬于脫離參考面的3D模型,脫離參考面的3D模型旋轉角度的獲得:從所述的旋轉角度模型庫建立器中獲取的各墻面的角度以及從所述的3D模型建立器中獲取餐桌的3D模型的對象信息,提取所述的餐桌的3D模型的對象信息中的OBB包圍盒的偏移角度;將所述的各墻面的角度逐個減去所述的OBB包圍盒的偏移角度所得差值記錄為角度組angle_group_1;再將所述的角度組angle_group_1中的角度挨個加上90度后形成垂直于所述的角度組angle_group_1的角度組angle_group_2;然后對所述的角度組angle_group_1和所述的角度組angle_group_2中的所有角度分別重新映射為從0度到360度之間范圍的角度(此范圍角度包括0度但不包括360度),得到角度組angle_group_3;再將所述的角度組angle_group_3按角度值以升序或降序進行重新排序,形成角度組angle_group_4;取角度組angle_group_4中的大于0的最小角度值記錄為3D模型的旋轉角度;
將上述所得餐桌的3D模型的旋轉角度以及餐桌的3D模型的對象信息一并傳輸給3D模型節(jié)點坐標計算器;
步驟4.旋轉3D模型;
從所述的3D模型旋轉角度計算器獲取步驟3中所得餐桌的3D模型的旋轉角度以及餐桌的3D模型的對象信息,以所述的3D模型的對象信息中的所述的參考節(jié)點坐標為中心對所述的3D模型各節(jié)點坐標按步驟3中所述的3D模型旋轉角度進行旋轉(其旋轉后的角度為3D模型旋轉前的角度加上其已旋轉的角度);最后將旋轉后的3D模型的對象信息傳輸給所述的3D模型建立器,由所述的3D模型建立器更新對應的3D模型的對象信息;
步驟5.繪制3D模型;
3D模型渲染器從3D模型建立器中獲取步驟4中經(jīng)更新后的餐桌的3D模型的對象信息,并根據(jù)該對象信息繪制餐桌的3D模型。