本發(fā)明涉及計算機視覺識別技術,尤其涉及一種基于高度探測器以自動計算3d模型移動后的高度的系統(tǒng)與方法。
背景技術:
隨著人們追求更加逼真的虛擬現(xiàn)實的體驗欲望,3d的虛擬現(xiàn)實技術也隨之普及。尤其在現(xiàn)有的居室3d模型建模技術中,常常涉及對家具的平移操作,對于某些特殊的家具的位置是時常依賴于靜止物的,即當靜止物發(fā)生變化后,此被移動的3d模型的高度也應該隨之變化;但在現(xiàn)有的技術中,都是通過人工檢測與人工設置的方法以控制高度正確性,即當操作者發(fā)現(xiàn)3d模型的靜止物已經(jīng)變化時,需要操作者再將按新的靜止物的高度對被移動的3d模型的高度進行重新設置;這種人工檢測與人工設置的方式既不方便也不準確,不僅造成誤差,同時大大增加了用戶對3d建模的操作成本。
技術實現(xiàn)要素:
1.發(fā)明要解決的技術問題
針對現(xiàn)有技術中所涉及的在3d模型建模中,涉及當靜止物發(fā)生變化后,被移動的3d模型的高度的正確性的控制都是通過人工檢測與人工糾正,該方法對被移動的3d模型的高度的正確性的控制既不方便也不準確,本發(fā)明提供一種基于高度探測器以自動計算3d模型移動后的高度的方法,即3d模型是否需要上升或下降進行自動探測以及高度自動設置的方法,大大提升了位移精確度,也大大降低了用戶對3d建模的操作成本,提升了用戶對3d模型的操作體驗。
2.技術方案
本發(fā)明基于高度探測器以自動計算3d模型移動后的高度的方法的技術方案進行了充分公開,其技術方案如下:
基于高度探測器以自動計算3d模型移動后的高度的系統(tǒng),包括4個模塊,即3d模型構建器、3d模型位移捕捉器、3d模型高度探測器和3d模型節(jié)點坐標計算器;其中3d模型構建器將移動物的obb包圍盒各節(jié)點坐標和靜止物的obb包圍盒各節(jié)點坐標一并傳輸給3d模型高度探測器;3d模型位移捕捉器將捕捉移動物控制移動的位移坐標傳輸給3d模型高度探測器;3d模型高度探測器將計算后的垂直位移坐標傳輸給3d模型節(jié)點坐標計算器。
3d模型構建器:根據(jù)移動物3d模型以及靜止物的3d模型各節(jié)點的坐標計算其對應obb包圍盒各節(jié)點坐標,并將移動物的obb包圍盒各節(jié)點坐標和靜止物的obb包圍盒各節(jié)點坐標一并傳輸給3d模型高度探測器;
3d模型位移捕捉器:捕捉控制移動物3d模型的水平位移坐標,并將此控制移動物3d模型的水平位移坐標傳輸給3d模型高度探測器;
3d模型高度探測器:根據(jù)從3d模型構建器中獲取移動物的obb包圍盒各節(jié)點坐標和靜止物的obb包圍盒各節(jié)點坐標以及從3d模型位移捕捉器獲取的移動物3d模型的水平位移坐標(所謂水平位移就是在平行與地面的平面內(nèi)的位移),計算移動物3d模型在移動后的垂直位移坐標(所謂垂直位移就是在垂直與地面的平面內(nèi)的位移);并將計算后的垂直位移坐標傳輸給3d模型節(jié)點坐標計算器;
3d模型節(jié)點坐標計算器:根據(jù)從3d模型高度探測器獲取的移動物3d模型垂直位移坐標對移動物3d模型各節(jié)點坐標進行垂直方向的平移。
基于高度探測器以自動計算3d模型移動后的高度的方法,所涉及在兩個3d模型之間,即其中一個靜止的3d模型,主要用來支撐移動的3d模型的;另一個移動的3d模型,移動物3d模型在任何時刻都不可以在靜止物3d模型的下方。本發(fā)明所提及的“兩多邊形相交”是指兩多邊形的所屬區(qū)域有重疊,因此,“一個多邊形被另一個多邊形包含”也在本技術方案所指的“相交”范疇內(nèi)。
基于高度探測器以自動計算3d模型移動后的高度的方法:
步驟1.初始化3d模型:3d模型構建器分別獲取靜止物3d模型各節(jié)點的坐標和移動物3d模型各節(jié)點的坐標,并分別根據(jù)靜止物和移動物的節(jié)點坐標計算其obb包圍盒各節(jié)點坐標;將靜止物的obb包圍盒各節(jié)點的坐標以及移動物的obb包圍盒各節(jié)點的坐標一并傳輸給3d模型移動探測器;
步驟2.捕捉控制移動物3d模型的水平位移坐標,即3d模型位移捕捉器從屏幕中捕捉控制移動物3d模型的水平位移坐標,并將水平位移坐標傳輸給3d模型移動探測器;
步驟3.計算垂直位移:3d模型高度探測器從3d模型構建器中獲取移動物的obb包圍盒各節(jié)點坐標和靜止物的obb包圍盒各節(jié)點坐標以及從3d模型位移捕捉器獲取的移動物3d模型的水平位移坐標,通過多邊形動態(tài)相交法或多邊形靜態(tài)相交法計算垂直位移:
多邊形動態(tài)相交法實現(xiàn)計算垂直位移的具體步驟:
(-)對移動物3d模型的obb包圍盒下平面各節(jié)點向靜止物3d模型的obb包圍盒下平面所在的平面進行垂直投影,形成移動物3d模型移動前的obb包圍盒的投影多邊形,假設此投影多邊形為group_old,靜止物3d模型的obb包圍盒下平面的多邊形為group_static;
(二)根據(jù)移動物3d模型的水平位移坐標對移動物3d模型obb包圍盒各節(jié)點進行平移計算,即將移動物3d模型obb包圍盒各節(jié)點的坐標與水平位移坐標分別按x、y、z軸的坐標分別進行相加,得到移動物3d模型obb包圍盒平移后的各節(jié)點坐標;
(三)對已平移后移動物3d模型的obb包圍盒下平面各節(jié)點向靜止物3d模型的obb包圍盒下平面所在的平面進行垂直投影,形成移動后的移動物3d模型obb包圍盒的投影多邊形,假設此投影多邊形為group_new;
(四)判斷多邊形group_old與多邊開group_static的位置關系,以及多邊形group_new與多邊開group_static的位置關系(判斷兩多邊形是否相交的算法在現(xiàn)有技術中已有公開,本發(fā)明不再贅述);
如果多邊形group_old與多邊開group_static是相交的,而多邊形group_new與多邊開group_static是不相交的,則被移動后的移動物3d模型的垂直位移應為靜止物3d模型的obb包圍盒的高度的負數(shù)值,即移動物3d模型的高度坐標值高度坐標值將要下落;
如果多邊形group_old與多邊開group_static是不相交的,而多邊形group_new與多邊開group_static是相交的,則被移動后的移動物3d模型的垂直位移應為靜止物3d模型的obb包圍盒的高度的正數(shù)值,即移動物3d模型的高度坐標值高度坐標值將要攀升;
如果多邊形group_old與多邊開group_static是不相交的,多邊形group_new與多邊開group_static也是不相交的,或者多邊形group_old與多邊開group_static是相交的,多邊形group_new與多邊開group_static也是相交的,則被移動后的3d模型的垂直位移應為0,即被移動后的3d模型的高度坐標值高度坐標值保持不變;
將計算后的垂直位移坐標傳輸給3d模型節(jié)點坐標計算器;
多邊形靜態(tài)相交法實現(xiàn)計算垂直位移的具體步驟:
(一)根據(jù)移動物3d模型的水平位移坐標對移動物3d模型obb包圍盒各節(jié)點進行平移計算,即將移動物3d模型obb包圍盒各節(jié)點的坐標與水平位移坐標分別按x、y、z軸的坐標進行分別相加,得到被移動的移動物3d模型obb包圍盒平移后的各節(jié)點坐標;
(二)對已平移后的移動物3d模型的obb包圍盒下平面各節(jié)點向靜止物3d模型的obb包圍盒下平面所在的平面進行垂直投影,形成移動后的移動物3d模型obb包圍盒的的投影多邊形;
(三)判斷被移動前的移動物3d模型的obb包圍盒是否在靜止的3d模型的obb包圍盒的上面;
如果被移動前的移動物3d模型的obb包圍盒在靜止物3d模型的obb包圍盒的上面,判斷3d模型移動后的obb包圍盒的的投影多邊形是否與靜止物3d模型的obb包圍盒下面多邊形相交,如果不相交,則被移動后的3d模型的垂直位移應為靜止物3d模型的obb包圍盒的高度的負數(shù)值;如果相交,則被移動后的3d模型的垂直位移應為0;
如果被移動前的3d模型的obb包圍盒不在靜止物3d模型的obb包圍盒的上面,判斷3d模型移動后的obb包圍盒的的投影多邊形是否與靜止物3d模型的obb包圍盒下面多邊形相交,如果相交,則被移動后的3d模型的垂直位移應為靜止物3d模型的obb包圍盒的高度的正數(shù)值;如果不相交,則被移動后的3d模型的垂直位移應為0;
將計算后的垂直位移坐標傳輸給3d模型節(jié)點坐標計算器;
步聚4.計算移動物3d模型垂直方向節(jié)點坐標,并進行垂直方向的平移。3d模型節(jié)點坐標計算器從3d模型高度探測器獲取的移動物3d模型垂直位移坐標,并將移動物3d模型各節(jié)點在垂直方向上的坐標都加上此位移坐標,即可得到移動物3d模型在移動后在垂直方向上的節(jié)點坐標。
3.有益效果
本發(fā)明提供了一種基于高度探測器以自動計算3d模型移動后的高度的系統(tǒng)與方法,通過對靜止物obb包圍盒和移動物obb包圍盒的投影后形成的多邊形進行相交檢驗,最終得出移動物3d模型垂直方向上的移動坐標,此過程皆為系統(tǒng)自動計算以達到對移動物3d模型的垂直位移的自動控制,解決了現(xiàn)有技術中被移動物體的3d模型的高度都是通過需要通過人工檢測、人工設置垂直位移而導致該垂直方向上位移而未被位移或者不該被位移而被誤位移,以及垂直位移坐標不精確的問題。綜上,本發(fā)明對3d模型移動后的高度進行自動計算的方法,不再需要通過人工檢測與人工設置,不僅大大提升了位移精確度,也大大降低了用戶對3d建模的操作成本,提升了用戶對3d模型的操作體驗。
附圖說明
圖1為本發(fā)明的3d模型平移后高度上升或下降示意圖,x-水平方向,y-垂直方向,1-靜止物3d模型,2-移動物3d模型;
圖2為本發(fā)明obb上平面或obb下平面示意圖,3-obb上平面,4-obb下平面;
圖3為本發(fā)明所涉及的系統(tǒng)模塊連接關系圖;
圖4為本發(fā)明多邊形動態(tài)相交的流程圖;
圖5為本發(fā)明多邊形靜態(tài)相交的流程圖。
具體實施方式
實施例1:
如圖1所示,靜止物3d模型1為電視柜、移動物3d模型2為電視,水平方向x,垂直方向y,平移電視后,計算電視與電視柜之間位置關系為例
如圖3所示,基于高度探測器以自動計算3d模型移動后的高度的系統(tǒng),包括4個模塊,即3d模型構建器、3d模型位移捕捉器、3d模型高度探測器和3d模型節(jié)點坐標計算器,其中3d模型構建器將移動物的obb包圍盒各節(jié)點坐標和靜止物的obb包圍盒各節(jié)點坐標一并傳輸給3d模型高度探測器;3d模型位移捕捉器將捕捉移動物控制移動的位移坐標傳輸給3d模型高度探測器;3d模型高度探測器將計算后的垂直位移坐標傳輸給3d模型節(jié)點坐標計算器。涉及各模塊的簡要技術如下:
3d模型構建器:根據(jù)電視3d模型以及電視柜的3d模型各節(jié)點的坐標計算其對應obb包圍盒各節(jié)點坐標,并將電視的obb包圍盒各節(jié)點坐標和電視柜的obb包圍盒各節(jié)點坐標一并傳輸給3d模型高度探測器;
3d模型位移捕捉器:捕捉控制電視3d模型的水平位移坐標,并將此控制電視3d模型的水平的位移坐標傳輸給3d模型高度探測器;
3d模型高度探測器:根據(jù)從3d模型構建器中獲取電視的obb包圍盒各節(jié)點坐標和電視柜的obb包圍盒各節(jié)點坐標以及從3d模型位移捕捉器獲取的電視3d模型的水平位移坐標(所謂水平位移就是在平行與地面的平面內(nèi)的位移),計算電視3d模型在移動后的垂直位移坐標(所謂垂直位移就是在垂直與地面的平面內(nèi)的位移);并將計算后的垂直位移坐標傳輸給3d模型節(jié)點坐標計算器;
3d模型節(jié)點坐標計算器:根據(jù)從3d模型高度探測器獲取的電視3d模型垂直位移坐標對電視3d模型各節(jié)點坐標進行垂直方向的平移。
基于高度探測器以自動計算3d模型移動后的高度的方法,所涉及在兩個3d模型之間,即其中一個靜止的3d模型,主要用來支撐移動的3d模型的;另一個移動的3d模型,電視3d模型在任何時刻都不可以在靜止物3d模型的下方。本發(fā)明所提及的“兩多邊形相交”是指兩多邊形的所屬區(qū)域有重疊,因此,“一個多邊形被另一個多邊形包含”也在本技術方案所指的“相交”范疇內(nèi)。本技術方案的實現(xiàn)方法有兩套方案,即方案一或方案二。
步驟1.初始化3d模型,3d模型構建器分別獲取電視柜3d模型各節(jié)點的坐標和電視3d模型各節(jié)點的坐標,并分別根據(jù)電視柜和電視的節(jié)點坐標計算其obb包圍盒各節(jié)點坐標;將電視柜的obb包圍盒各節(jié)點的坐標以及電視的obb包圍盒各節(jié)點的坐標一并傳輸給3d模型移動探測器;
步驟2.捕捉控制電視3d模型的水平位移坐標。電視和電視柜在x軸與z軸組成的平面內(nèi)移動屬于水平移動,在y軸上移動屬于垂直移動,參見圖2,obb上平面3,obb下平面4;
3d模型位移捕捉器從屏幕中捕捉控制電視3d模型的位移坐標,并將位移坐標傳輸給3d模型移動探測器;
步驟3.計算垂直位移。3d模型高度探測器從3d模型構建器中獲取電視的obb包圍盒各節(jié)點坐標和電視柜的obb包圍盒各節(jié)點坐標以及從3d模型位移捕捉器獲取的電視3d模型的水平位移坐標,通過多邊形動態(tài)相交法或多邊形靜態(tài)相交法計算垂直位移:
(1)通過多邊形動態(tài)相交法計算垂直位移的具體步驟,參見圖4:
(1-1)對電視的obb包圍盒下平面各節(jié)點向電視柜obb包圍盒下平面所在的平面進行垂直投影,形成3d模型移動前的obb包圍盒的投影多邊形,得到的投影多邊形的各節(jié)點坐標可以按順時針或逆時針并使用數(shù)組或鏈表對其存儲;假設此投影多邊形為group_old,靜止的3d模型的obb包圍盒下平面的多邊形為group_static;
(1-2)根據(jù)電視3d模型的水平位移坐標對電視3d模型obb包圍盒各節(jié)點進行平移計算。計算過程:假設平移矢量位移在x軸和y軸以及z軸上坐標分別為tx和ty以及tz,對電視obb包圍盒各節(jié)點在x軸和y軸以及z軸上的坐標分別加上tx和ty以及tz(一般水平位移時,ty的值為0),得到電視obb包圍盒平移后的節(jié)點坐標;
(1-3)對已平移后的電視obb包圍盒下平面各節(jié)點向電視柜的obb包圍盒下平面所在的平面進行垂直投影,形成移動后的電視obb包圍盒的投影多邊形,假設此投影多邊形為group_new;
(1-4)判斷多邊形group_old與多邊開group_static的位置關系,以及多邊形group_new與多邊開group_static的位置關系;
如果多邊形group_old與多邊開group_static是相交的,而多邊形group_new與多邊開group_static是不相交的,則被移動后電視的3d模型的高度位移應為靜止的電視柜obb包圍盒的高度的負數(shù)值;
如果多邊形group_old與多邊開group_static是不相交的,而多邊形group_new與多邊開group_static是相交的,則被移動后電視的3d模型的高度位移應為電視柜obb包圍盒的高度正數(shù)值;
如果多邊形group_old與多邊開group_static是不相交的,多邊形group_new與多邊開group_static也是不相交的,或者多邊形group_old與多邊開group_static是相交的,多邊形group_new與多邊開group_static也是相交的,則被移動后電視的3d模型的高度位移為0;
也可以通過(2)多邊形靜態(tài)相交法計算垂直位移的具體步驟,參見附圖5:
(2-1)根據(jù)電視3d模型的水平位移坐標對電視3d模型obb包圍盒各節(jié)點進行平移計算。計算過程:假設平移矢量位移在x軸和z軸上坐標分別為tx和tz,對電視obb包圍盒各節(jié)點在x軸和z軸上的坐標分別加上tx和tz,得到電視obb包圍盒平移后的節(jié)點坐標;
(2-2)對已平移后的電視obb包圍盒下平面各節(jié)點向電視柜obb包圍盒下平面所在的平面進行垂直投影,形成移動后的電視obb包圍盒的的投影多邊形,假設此投影多邊形為group_new,電視柜obb包圍盒下平面的多邊形為group_static;
(2-3)判斷被移動前的電視obb包圍盒是否在電視柜obb包圍盒的上面;
如果被移動前的電視obb包圍盒在電視柜的obb包圍盒的上面,判斷多邊形group_new與多邊形group_static是否相交,如果不相交,則被移動后的電視3d模型的高度位移應為電視柜obb包圍盒的高度的負數(shù)值;如果相交,則被移動后電視的3d模型的高度位移應為0;
如果被移動前電視的3d模型的obb包圍盒不在電視柜obb包圍盒的上面,判斷多邊形group_new與多邊形group_static是否相交,如果相交,則被移動后電視的3d模型的高度位移應為電視柜obb包圍盒的高度的正數(shù)值;如果不相交,則被移動后電視的3d模型的高度位移應為0;將計算后的垂直位移坐標傳輸給3d模型節(jié)點坐標計算器。
步聚4.計算電視3d模型垂直方向節(jié)點坐標,并進行垂直方向的平移。3d模型節(jié)點坐標計算器從3d模型高度探測器獲取的電視3d模型垂直位移坐標,并將電視3d模型各節(jié)點在垂直方向上的坐標都加上此位移坐標,即可得到電視3d模型在移動后在垂直方向上的節(jié)點坐標。