本發(fā)明涉及一種對3d模型的尺寸可動態(tài)變更的3d虛擬現(xiàn)實(shí)建模方法,尤其涉及到一種可動態(tài)自定義3d模型尺寸的系統(tǒng)和方法,在居室3d模型中對家具3d模型的長寬高的尺寸進(jìn)行動態(tài)修改后,其對應(yīng)的3d模型會根據(jù)修改后的最新尺寸進(jìn)行重新渲染的方法。
背景技術(shù):
隨時人們追求更加逼真的虛擬現(xiàn)實(shí)的體驗(yàn)欲望的強(qiáng)烈,3d的虛擬現(xiàn)實(shí)技術(shù)也隨之普及。在3d模型設(shè)計過程中,時常需要對3d模型的尺寸進(jìn)行修改。對于3d模型的尺寸修改在現(xiàn)有3d設(shè)計軟件中已支持的很好,如:3dmax等,但是這些技術(shù)方案存在以下兩個問題:
(1)現(xiàn)有技術(shù)中,只支持基于3d模型在坐標(biāo)系中的坐標(biāo)尺寸修改,但用戶想要的是基于現(xiàn)實(shí)世界中真實(shí)的尺寸進(jìn)行修改;因此,現(xiàn)有技術(shù)都是通過人工將現(xiàn)實(shí)中的真實(shí)尺寸轉(zhuǎn)換為3d模型坐標(biāo)尺寸,再根據(jù)3d模型坐標(biāo)尺寸進(jìn)行修改;這種將現(xiàn)實(shí)世界的尺寸與虛擬世界中的坐標(biāo)尺寸的轉(zhuǎn)換是一個3d坐標(biāo)映射過程,這就需要使用者有一定的3d數(shù)學(xué)以及3d設(shè)計的知識,這無疑增加了3d模型的尺寸修改的難度,不利于在互聯(lián)網(wǎng)技術(shù)中推廣;
(2)現(xiàn)有技術(shù)中,當(dāng)3d模型的坐標(biāo)尺寸修改都是基于其obb的中心點(diǎn)進(jìn)行縮放的,尤其涉及尺寸修改后,3d模型就有可能出現(xiàn)陷入支撐模型或懸空的現(xiàn)象,因此,仍需要再次通過人工對其進(jìn)行平移;這種方式會導(dǎo)致需要人工反復(fù)調(diào)整位置并且最終的3d模型的位置仍可能存在一定的誤差;
在現(xiàn)有的居室3d模型建模技術(shù)中,因?yàn)樯鲜鰡栴}無法得到很好的解決,因此一些非專業(yè)的3d設(shè)計軟件索性就不支持3d模型尺寸修改的功能了,以致3d模型一旦被加載,其尺寸就再也無法變更,導(dǎo)致因3d模型的尺寸固定而無法滿足真實(shí)世界的模擬需求,因此一旦因?yàn)槌叽绮灰恢碌?d模型就需要重新創(chuàng)建一個新的3d模型進(jìn)行重新加載,整個過程效率低下,以致無法滿足用戶diy的3d建模的需求。
技術(shù)實(shí)現(xiàn)要素:
1.發(fā)明要解決的技術(shù)問題
針對現(xiàn)有技術(shù)中所提及的在居室3d模型建模中,3d模型的尺寸修改需要通過人工將現(xiàn)實(shí)中的真實(shí)尺寸轉(zhuǎn)換為3d模型坐標(biāo)尺寸進(jìn)行修改以及修改尺寸后經(jīng)常需要再次通過人工對其反復(fù)調(diào)整位置的問題,導(dǎo)致其操作十分繁瑣的問題,對人工浪費(fèi)極大,本發(fā)明提供一種可動態(tài)自定義3d模型尺寸的系統(tǒng)和方法,即在居室3d模型中對家具3d模型的現(xiàn)實(shí)世界的長寬高的尺寸進(jìn)行動態(tài)修改后,其對應(yīng)的3d模型會自動修改其坐標(biāo)系統(tǒng)尺寸并自動對其平移的方法。
2.技術(shù)方案
本發(fā)明對可動態(tài)自定義3d模型尺寸的系統(tǒng)和方法的技術(shù)方案進(jìn)行了充分公開,其技術(shù)方案如下:
對可動態(tài)自定義3d模型尺寸的系統(tǒng),包括4個模塊,即3d模型記錄器、3d模型實(shí)際尺寸設(shè)置器、3d模型節(jié)點(diǎn)坐標(biāo)計算器和3d模型渲染器;
3d模型記錄器:記錄3d模型的對象信息,3d模型的對象信息包括:
(1)3d模型各節(jié)點(diǎn)的坐標(biāo);
(2)3d模型的obb包圍盒長高寬;假設(shè)3d模型在剛被加載時對應(yīng)obb包圍盒的長高寬的標(biāo)尺線分別與x、y、z坐標(biāo)軸平行,則平行于x軸的標(biāo)尺線段在x軸上的投影線段長度即為3d模型的長,平行于y軸的標(biāo)尺線段在y軸上的投影線段長度即為3d模型的高,平行于z軸的標(biāo)尺線段在z軸上的投影線段長度即為3d模型的寬;
(3)3d模型的obb包圍盒分別在x、y、z軸上的旋轉(zhuǎn)角度;假設(shè)3d模型剛被加載時對應(yīng)obb包圍盒的長高寬的標(biāo)尺線分別與x、y、z坐標(biāo)軸平行,則在x、y、z軸上的旋轉(zhuǎn)角度皆為0,后續(xù)可以對其分別按x軸或y軸或z軸進(jìn)行旋轉(zhuǎn),其旋轉(zhuǎn)的角度即為在對應(yīng)坐標(biāo)軸上的旋轉(zhuǎn)角度;
(4)3d模型的obb包圍盒中的平移參考點(diǎn)坐標(biāo);平移參考點(diǎn)可以是3d模型的obb包圍盒中的任意一點(diǎn),但在房屋的場景中,一般以與支撐物相接觸的3d模型的obb包圍盒的那個面的中心點(diǎn)作為平移參考點(diǎn);
(5)3d模型在現(xiàn)實(shí)世界中的實(shí)際長高寬;此實(shí)際長高寬的值一般通過預(yù)先設(shè)置,在3d模型加載時,一并與3d模型其他信息一并讀入;
3d模型實(shí)際尺寸設(shè)置器:從3d模型記錄器獲取對應(yīng)的3d模型的對象信息,并對其現(xiàn)實(shí)世界中的尺寸進(jìn)行設(shè)置;然后將設(shè)置前的3d模型的對象信息以及設(shè)置后的實(shí)際尺寸一并傳輸給3d模型節(jié)點(diǎn)坐標(biāo)計算器;
3d模型節(jié)點(diǎn)坐標(biāo)計算器:根據(jù)從3d模型實(shí)際尺寸設(shè)置器中獲取的設(shè)置前的3d模型的對象信息以及設(shè)置后的實(shí)際尺寸計算變更后的3d模型各節(jié)點(diǎn)的坐標(biāo);并將變更后的3d模型各節(jié)點(diǎn)的坐標(biāo)傳輸給3d模型記錄器,以更新對應(yīng)的3d模型的對象信息;
3d模型渲染器:根據(jù)從3d模型記錄器獲取3d模型的對象信息對3d模型進(jìn)行繪制。
可動態(tài)自定義3d模型尺寸的方法,其步驟包括:
步驟1.初始化3d模型的對象信息:3d模型記錄器記錄了3d模型的對象信息包括:3d模型各節(jié)點(diǎn)的坐標(biāo),3d模型的obb包圍盒長高寬,3d模型的obb包圍盒在x、y、z軸上的旋轉(zhuǎn)角度,3d模型的obb包圍盒中的平移參考點(diǎn)坐標(biāo),以及3d模型在現(xiàn)實(shí)世界中的實(shí)際長、高、寬;
步聚2.設(shè)置3d模型現(xiàn)實(shí)世界的尺寸:3d模型實(shí)際尺寸設(shè)置器從3d模型記錄器找到對應(yīng)的3d模型對象(尋找的方式可以但不限于:通過3d模型唯一標(biāo)識唯一定位到某一3d模型或者通過obb包圍盒的各節(jié)點(diǎn)的坐標(biāo)唯一定位到某一3d模型),假設(shè)此3d模型對象為objecta,并對此3d模型objecta的現(xiàn)實(shí)世界中的長度或者寬度或者高度的尺寸進(jìn)行設(shè)置;然后將設(shè)置前的3d模型的對象信息以及設(shè)置后的實(shí)際尺寸一并傳輸給3d模型節(jié)點(diǎn)坐標(biāo)計算器;
步聚3.計算3d模型變更后的各節(jié)點(diǎn)坐標(biāo):
第一步:計算長寬高的縮放比例值。3d模型節(jié)點(diǎn)坐標(biāo)計算器從3d模型實(shí)際尺寸設(shè)置器中獲取3d模型objecta的設(shè)置前的3d模型的對象信息以及設(shè)置后的實(shí)際尺寸,并根據(jù)更新后的3d模型現(xiàn)實(shí)世界中的長寬高的尺寸與更新前的3d模型現(xiàn)世界中的長寬高對應(yīng)的尺寸分別計算縮放比例值,假設(shè)長度的縮放比例值為kl,假設(shè)寬度的縮放比例值為kw,假設(shè)高度的縮放比例值為kh;
長度的縮放比例值kl=更新后的3d模型現(xiàn)實(shí)世界中的長度除以更新前的3d模型現(xiàn)實(shí)世界中的長度;比例值kl取值為正實(shí)數(shù),如果更新后與更新前的長度相同,則kl=1;
寬度的縮放比例值kw=更新后的3d模型現(xiàn)實(shí)世界中的寬度除以更新前的3d模型現(xiàn)實(shí)世界中的寬度;比例值kw取值為正實(shí)數(shù),如果更新后與更新前的寬度相同,則kw=1;
高度的縮放比例值kh=更新后的3d模型現(xiàn)實(shí)世界中的高度除以更新前的3d模型現(xiàn)實(shí)世界中的高度;比例值kh取值為正實(shí)數(shù),如果更新后與更新前的高度相同,則kh=1;
第二步:將3d模型中的參考點(diǎn)平移到坐標(biāo)原點(diǎn)。假設(shè)3d模型objecta對應(yīng)的參考點(diǎn)坐標(biāo)為(xc,yc,zc),xc和yc以及zc分別是參考點(diǎn)在x軸、y軸、z軸上的坐標(biāo)值,全文相同。則參考點(diǎn)平移到坐標(biāo)原點(diǎn)時在x軸、y軸、z軸上分別需要平移的向量坐標(biāo)為-xc、-yc以及-zc。假設(shè)3d模型objecta的對象信息中的所有節(jié)點(diǎn)坐標(biāo)為node_group_old,從節(jié)點(diǎn)坐標(biāo)node_group_old中挨個取節(jié)點(diǎn)坐標(biāo),假設(shè)獲取的節(jié)點(diǎn)坐標(biāo)為(xo,yo,zo),假設(shè)此獲取的節(jié)點(diǎn)跟隨參考點(diǎn)平移后的坐標(biāo)為(xt1,yt1,zt1),即在x軸上的xt1的坐標(biāo)值=xo-xc,在y軸上的yt1的值=y(tǒng)o-yc,在z軸上的zt1的值=zo-zc;最終得到所有節(jié)點(diǎn)平移到坐標(biāo)原點(diǎn)的坐標(biāo),假設(shè)此時平移后的3d模型的坐標(biāo)為node_group_t1;
第三步:將3d模型的obb包圍盒將長高寬的標(biāo)尺線分別旋轉(zhuǎn)至與x、y、z軸平行。假設(shè)當(dāng)前的3d模型objecta的obb包圍盒圍繞y軸逆時針偏移角度為α、圍繞z軸的逆時針偏移角度為β,圍繞x軸的逆時針偏移角度為γ;從3d模型平移后的節(jié)點(diǎn)坐標(biāo)node_group_t1中挨個取節(jié)點(diǎn)坐標(biāo)(xt1,yt1,zt1),并對此節(jié)點(diǎn)坐標(biāo)分別按y軸以順時針偏移角度α旋轉(zhuǎn)和按z軸以順時針偏移角度β旋轉(zhuǎn)以及按x軸以順時針偏移角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開,此處不再贅述),假設(shè)此節(jié)點(diǎn)旋轉(zhuǎn)的坐標(biāo)為(xr1,yr1,zr1),最終得到所有節(jié)點(diǎn)旋轉(zhuǎn)到與坐標(biāo)軸平行的坐標(biāo),假設(shè)此時3d模型旋轉(zhuǎn)后的坐標(biāo)為node_group_r1;
第四步:將3d模型的節(jié)點(diǎn)坐標(biāo)分別在x、y、z軸上進(jìn)行縮放。從3d模型旋轉(zhuǎn)后的節(jié)點(diǎn)坐標(biāo)node_group_r1中挨個取節(jié)點(diǎn)坐標(biāo)(xr1,yr1,zr1),并對此節(jié)點(diǎn)坐標(biāo)按比例值進(jìn)行縮放,假設(shè)縮放后的節(jié)點(diǎn)坐標(biāo)為(xk1,yk1,zk1),因?yàn)樾D(zhuǎn)后的3d模型的obb包圍盒的長高寬的標(biāo)尺線分別與x、y、z軸平行,因此,在x軸上的xk1的值=xr1乘以長度縮放比例值kl,在y軸上的yk1的值=y(tǒng)r1乘以高度縮放比例值kh,在z軸上的zk1的值=zr1乘以寬度縮放比例值kw;最終得到所有節(jié)點(diǎn)縮放后的坐標(biāo),假設(shè)此時3d模型縮放后坐標(biāo)為node_group_k1;
第五步:將3d模型以參考點(diǎn)為中心再旋轉(zhuǎn)到旋轉(zhuǎn)前的角度。從3d模型縮放后的節(jié)點(diǎn)坐標(biāo)node_group_k1中挨個取節(jié)點(diǎn)坐標(biāo)(xk1,yk1,zk1),并對此節(jié)點(diǎn)坐標(biāo)分別圍繞y軸逆時針偏移角度α旋轉(zhuǎn)和圍繞z軸逆時針偏移角度β旋轉(zhuǎn)以及圍繞x軸以逆時針偏移角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開,此處不再贅述),假設(shè)此節(jié)點(diǎn)旋轉(zhuǎn)的坐標(biāo)為(xr2,yr2,zr2),假設(shè)此時3d模型旋轉(zhuǎn)后的坐標(biāo)為node_group_r2;
第六步:將3d模型以參考點(diǎn)為中心再平移到平移前的位置;從節(jié)點(diǎn)坐標(biāo)node_group_r2中挨個取節(jié)點(diǎn)坐標(biāo)(xr2,yr2,zr2),假設(shè)此獲取的節(jié)點(diǎn)平移到平移前的坐標(biāo)為(xt2,yt2,zt2),在x軸上的xt2的值=xr2+xc,在y軸上的yt2的值=y(tǒng)r2+yc,在z軸上的zt2的值=zr2+zc;最終得到所有節(jié)點(diǎn)平移到平移前的坐標(biāo),假設(shè)此時3d模型平移后的坐標(biāo)為node_group_t2,最后將所有節(jié)點(diǎn)平移到平移前的坐標(biāo)node_group_t2傳輸給3d模型記錄器,以更新對應(yīng)的3d模型的對象信息;
另,以上步驟中提涉的“先根據(jù)參考點(diǎn)平移至坐標(biāo)原點(diǎn)的位移對3d模型各節(jié)點(diǎn)進(jìn)行平移,然后以原點(diǎn)為旋轉(zhuǎn)中心分別按x軸、y軸、z軸的偏移角度進(jìn)行旋轉(zhuǎn)”的技術(shù)方向等同于“先以參考點(diǎn)為旋轉(zhuǎn)中心分別按x軸、y軸、z軸的旋轉(zhuǎn)角進(jìn)行旋轉(zhuǎn),然后根據(jù)參考點(diǎn)平移至坐標(biāo)原點(diǎn)的位移對3d模型各節(jié)點(diǎn)進(jìn)行平移”;因此,不管是“先平移后旋轉(zhuǎn)”還是“先旋轉(zhuǎn)后平移”的技術(shù)方案部落在本發(fā)明的技術(shù)方案中;
步驟4.繪制3d模型。3d模型渲染器從3d模型記錄器中獲取3d模型的對象信息,并根據(jù)3d模型對象信息中更新后的節(jié)點(diǎn)坐標(biāo)node_group_t2繪制3d模型(3d模型繪制的具體技術(shù)方案在現(xiàn)有技術(shù)中已有公開,本發(fā)明不再贅述);
上述的步驟4與步驟2或者步驟3沒有嚴(yán)格的先后次序。
3.有益效果
現(xiàn)有技術(shù)中,隨時人們追求更加逼真的虛擬現(xiàn)實(shí)的體驗(yàn)欲望的強(qiáng)烈,3d的虛擬現(xiàn)實(shí)技術(shù)也隨之普及。尤其在居室3d模型建模技術(shù)中,3d模型的尺寸修改需要通過人工將現(xiàn)實(shí)世界中的真實(shí)尺寸轉(zhuǎn)換為3d模型坐標(biāo)尺寸進(jìn)行修改以及修改尺寸后經(jīng)常需要再次通過人工對其進(jìn)行平移的問題,整個過程效率低下,以致無法滿足普通用戶diy的3d建模的設(shè)計需求。本發(fā)明的一種對3d模型的尺寸可動態(tài)變更的方法的創(chuàng)新性具體體現(xiàn)在:
本發(fā)明提供了3d模型節(jié)點(diǎn)坐標(biāo)計算器,此模塊有兩大優(yōu)點(diǎn),具體如下:
本模塊提供了一種3d模型的對應(yīng)實(shí)物在現(xiàn)實(shí)世界中的尺寸與其在3d坐標(biāo)系中的虛擬尺寸的自動關(guān)聯(lián)的方法,并通過用戶對現(xiàn)實(shí)世界的真實(shí)長寬高尺寸的設(shè)置,根據(jù)此關(guān)聯(lián)信息自動將被更新后的現(xiàn)實(shí)世界的真實(shí)尺寸轉(zhuǎn)換為3d模型在3d坐標(biāo)中虛擬尺寸,并對3d模型各節(jié)點(diǎn)坐標(biāo)自動進(jìn)行平移各縮放等操作,以達(dá)到對3d模型按長寬高進(jìn)行自動縮放的效果,解決了現(xiàn)有技術(shù)中3d模型的尺寸修改需要通過人工將現(xiàn)實(shí)世界中的真實(shí)尺寸轉(zhuǎn)換為3d模型坐標(biāo)尺寸進(jìn)行修改的問題,以達(dá)到用戶只需關(guān)注3d模型對應(yīng)真實(shí)世界中的尺寸不再需要關(guān)注3d模型在3d坐標(biāo)系中的虛擬尺寸。
本發(fā)明提供一種對3d模型按參考點(diǎn)進(jìn)行縮放的方法,即依據(jù)對家具3d模型的平移參考點(diǎn)坐標(biāo)保持不變、對3d模型的長寬高的尺寸進(jìn)行自動縮放的方法,解決了修改尺寸后經(jīng)常導(dǎo)致3d模型嵌入或懸浮于支撐物以致需要再次通過人工對其進(jìn)行平移的問題,以達(dá)到只需要在與支撐物接觸的3d模型obb包圍盒的面上選擇參考點(diǎn),即可實(shí)現(xiàn)縮放后的3d模型的原obb包圍盒的接觸面仍與支撐物保持接觸,即實(shí)現(xiàn)縮放后的3d模型不再嵌入或懸浮于支撐物的問題;
綜上,本發(fā)明提供的可動態(tài)自定義3d模型尺寸的方法,簡化了人工的參與,即降低了用戶的操作成本,大大提升了用戶對3d模型的操作體驗(yàn)。
附圖說明
圖1為本發(fā)明的尺寸變更后3d模型進(jìn)行縮放示意圖;
圖2為本發(fā)明所涉及的標(biāo)尺線示意圖;
圖3為本發(fā)明所涉及的系統(tǒng)模塊圖;
圖4為本發(fā)明的算法流程圖。
具體實(shí)施方式
實(shí)施例1:
以對安放在地面上的桌子3d模型的現(xiàn)實(shí)尺寸縮放為例
下面結(jié)合圖1-4對本發(fā)明做進(jìn)一步的詳細(xì)說明,以令本領(lǐng)域技術(shù)人員參照說明書文字能夠據(jù)以實(shí)施。
對可動態(tài)自定義3d模型尺寸的系統(tǒng),包括4個模塊,即3d模型記錄器、3d模型實(shí)際尺寸設(shè)置器、3d模型節(jié)點(diǎn)坐標(biāo)計算器和3d模型渲染器;涉及各模塊的簡要技術(shù)如下:
3d模型記錄器:記錄3d模型的對象信息,3d模型的對象信息包括:
1)3d模型各節(jié)點(diǎn)的坐標(biāo);
2)3d模型的obb包圍盒長、高、寬;假設(shè)3d模型在剛被加載時對應(yīng)obb包圍盒的長高寬的標(biāo)尺線分別與xyz坐標(biāo)軸平行,則平行于x軸的標(biāo)尺線段在x軸上的投影線段長度即為3d模型的長,平行于y軸的標(biāo)尺線段在y軸上的投影線段長度即為3d模型的高,平行于z軸的標(biāo)尺線段在z軸上的投影線段長度即為3d模型的寬;
3)3d模型的obb包圍盒在x、y、z軸上的旋轉(zhuǎn)角度;假設(shè)3d模型剛被加載時對應(yīng)obb包圍盒的長高寬的標(biāo)尺線分別與xyz坐標(biāo)軸平行,則在xyz軸上的旋轉(zhuǎn)角度皆為0,后續(xù)可以對其分別按x軸或y軸或z軸進(jìn)行旋轉(zhuǎn),其旋轉(zhuǎn)的角度即為在對應(yīng)坐標(biāo)軸上的旋轉(zhuǎn)角度;
4)3d模型的obb包圍盒中的平移參考點(diǎn)坐標(biāo);平移參考點(diǎn)可以是3d模型的obb包圍盒中的任意一點(diǎn),但在房屋的場景中,一般按與支撐物相接觸的3d模型的obb包圍盒的那個面的中心點(diǎn)作為平移參考點(diǎn);
5)3d模型在現(xiàn)實(shí)世界中的實(shí)際長高寬;此實(shí)際長高寬的值一般通過預(yù)先設(shè)置,在3d模型加載時,一并與3d模型其他信息一并讀入;
3d模型實(shí)際尺寸設(shè)置器:從3d模型記錄器獲取對應(yīng)的3d模型的對象信息,并對其現(xiàn)實(shí)世界中的尺寸進(jìn)行設(shè)置;然后將設(shè)置前的3d模型的對象信息以及設(shè)置后的實(shí)際尺寸一并傳輸給3d模型節(jié)點(diǎn)坐標(biāo)計算器;
3d模型節(jié)點(diǎn)坐標(biāo)計算器:根據(jù)從3d模型實(shí)際尺寸設(shè)置器中獲取的設(shè)置前的3d模型的對象信息以及設(shè)置后的實(shí)際尺寸計算變更后的3d模型各節(jié)點(diǎn)的坐標(biāo);并將變更后的3d模型各節(jié)點(diǎn)的坐標(biāo)傳輸給3d模型記錄器,以更新對應(yīng)的3d模型的對象信息;
3d模型渲染器:根據(jù)從3d模型記錄器獲取3d模型的對象信息對3d模型進(jìn)行繪制。
可動態(tài)自定義3d模型尺寸的方法,其步驟包括:
步驟1.初始化3d模型的對象信息。3d模型記錄器記錄了對象信息包括:3d模型各節(jié)點(diǎn)的坐標(biāo),3d模型的obb包圍盒長高寬,3d模型的obb包圍盒在xyz軸上的旋轉(zhuǎn)角度,3d模型的obb包圍盒中的平移參考點(diǎn)坐標(biāo),以及3d模型在現(xiàn)實(shí)世界中的實(shí)際長高寬;
步聚2.設(shè)置3d模型現(xiàn)實(shí)世界的尺寸。3d模型實(shí)際尺寸設(shè)置器從3d模型記錄器找到桌子3d模型對象(尋找的方式可以但不限于:通過3d模型唯一標(biāo)識唯一定位到某一3d模型或者通過obb包圍盒的各節(jié)點(diǎn)的坐標(biāo)唯一定位到某一3d模型),假設(shè)此3d模型對象為objecta,并對此桌子3d模型objecta的現(xiàn)實(shí)世界中的長度或者寬度或者高度的尺寸進(jìn)行設(shè)置;然后將設(shè)置前的桌子3d模型信息以及設(shè)置后的實(shí)際尺寸一并傳輸給3d模型節(jié)點(diǎn)坐標(biāo)計算器;
步聚3.計算3d模型變更后的各節(jié)點(diǎn)坐標(biāo)。
第一步:計算長寬高的縮放比例值。3d模型節(jié)點(diǎn)坐標(biāo)計算器從3d模型實(shí)際尺寸設(shè)置器中獲取桌子3d模型objecta的設(shè)置前的3d模型的對象信息以及設(shè)置后的實(shí)際尺寸,并根據(jù)更新后的桌子3d模型現(xiàn)實(shí)世界中的長寬高的尺寸與更新前的3d模型現(xiàn)世界中的長寬高對應(yīng)的尺寸分別計算縮放比例值。假設(shè)長度的縮放比例值為kl,假設(shè)寬度的縮放比例值為kw,假設(shè)高度的縮放比例值為kh;
長度的縮放比例值kl=更新后的3d模型現(xiàn)實(shí)世界中的長度除以更新前的3d模型現(xiàn)實(shí)世界中的長度;比例值kl取值為正實(shí)數(shù),如果更新后與更新前的長度相同,則kl=1;假設(shè)更新后的3d模型現(xiàn)實(shí)世界中的長度1.5米,更新前的3d模型現(xiàn)實(shí)世界中的長度3米,則kl=0.5;
寬度的縮放比例值kw=更新后的3d模型現(xiàn)實(shí)世界中的寬度除以更新前的3d模型現(xiàn)實(shí)世界中的寬度;比例值kw取值為正實(shí)數(shù),如果更新后與更新前的寬度相同,則kw=1;假設(shè)更新后的3d模型現(xiàn)實(shí)世界中的寬度1米,更新前的3d模型現(xiàn)實(shí)世界中的寬度1米,則kw=1;
高度的縮放比例值kh=更新后的3d模型現(xiàn)實(shí)世界中的高度除以更新前的3d模型現(xiàn)實(shí)世界中的高度;比例值kh取值為正實(shí)數(shù),如果更新后與更新前的高度相同,則kh=1;假設(shè)更新后的3d模型現(xiàn)實(shí)世界中的高度1米,更新前的3d模型現(xiàn)實(shí)世界中的高度0.5米,則kh=2;
第二步:將3d模型中的參考點(diǎn)平移到坐標(biāo)原點(diǎn)。假設(shè)桌子3d模型objecta對應(yīng)的參考點(diǎn)坐標(biāo)為(xc,yc,zc),xc和yc以及zc分別是參考點(diǎn)在x軸、y軸、z軸上的坐標(biāo)值,假設(shè)y軸坐標(biāo)為0表示地面的坐標(biāo),則在地面上的參考點(diǎn)坐標(biāo)假設(shè)為xc=0.5,yc=0,zc=0.5。則參考點(diǎn)平移到坐標(biāo)原點(diǎn)時在x軸、y軸、z軸上分別需要平移的向量坐標(biāo)為-xc、-yc以及-zc。假設(shè)桌子3d模型objecta的對象信息中的所有節(jié)點(diǎn)坐標(biāo)為node_group_old,從節(jié)點(diǎn)坐標(biāo)node_group_old中挨個取節(jié)點(diǎn)坐標(biāo),假設(shè)從支撐面上獲取的節(jié)點(diǎn)坐標(biāo)為xt2,yt2,zt2,xo=1,yo=0,zo=2,,假設(shè)此獲取的節(jié)點(diǎn)跟隨參考點(diǎn)平移后的坐標(biāo)為(xt1,yt1,zt1),即在x軸上的xt1的坐標(biāo)值=xo-xc=0.5,在y軸上的yt1的值=y(tǒng)o-yc=0,在z軸上的zt1的值=zo-zc=1.5;最終得到所有節(jié)點(diǎn)平移到坐標(biāo)原點(diǎn)的坐標(biāo),假設(shè)此時平移后的桌子3d模型的坐標(biāo)為node_group_t1;
第三步:將3d模型的obb包圍盒按長高寬的標(biāo)尺線分別旋轉(zhuǎn)至與xyz軸平行。假設(shè)當(dāng)前的桌子3d模型objecta的obb包圍盒圍繞y軸逆時針偏移角度為α、圍繞z軸的逆時針偏移角度為β,圍繞x軸的逆時針偏移角度為γ,假設(shè)α=90,β=0,γ=0;從桌子3d模型平移后的節(jié)點(diǎn)坐標(biāo)node_group_t1中挨個取節(jié)點(diǎn)坐標(biāo)(xt1,yt1,zt1),并對此節(jié)點(diǎn)坐標(biāo)分別按y軸以順時針偏移角度α旋轉(zhuǎn)和按z軸以順時針偏移角度β旋轉(zhuǎn)以及按x軸以順時針偏移角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開,此處不再贅述),假設(shè)此節(jié)點(diǎn)旋轉(zhuǎn)的坐標(biāo)為(xr1,yr1,zr1),則xr1=-1.5,yr1=0,zr1=0.5,最終得到所有節(jié)點(diǎn)旋轉(zhuǎn)到與坐標(biāo)軸平行的坐標(biāo),假設(shè)此時桌子3d模型旋轉(zhuǎn)后的坐標(biāo)為node_group_r1:
第四步:將3d模型的節(jié)點(diǎn)坐標(biāo)分別在x、y、z軸上進(jìn)行縮放。從桌子3d模型旋轉(zhuǎn)后的節(jié)點(diǎn)坐標(biāo)node_group_r1中挨個取節(jié)點(diǎn)坐標(biāo)(xr1,yr1,zr1),并對此節(jié)點(diǎn)坐標(biāo)按比例值進(jìn)行縮放,假設(shè)縮放后的節(jié)點(diǎn)坐標(biāo)為(xk1,yk1,zk1),因?yàn)樾D(zhuǎn)后的桌子3d模型的obb包圍盒的長高寬的標(biāo)尺線分別與x、y、z軸平行,因此,在x軸上的xk1的值=xr1乘以長度縮放比例值kl=-1.5*0.5=-0.75,在y軸上的yk1的值=y(tǒng)r1乘以高度縮放比例值kh=0*2=0,在z軸上的zk1的值=zr1乘以寬度縮放比例值kw=0.5*1=0.5;最終得到所有節(jié)點(diǎn)縮放后的坐標(biāo),假設(shè)此時桌子3d模型縮放后坐標(biāo)為node_group_k1;
第五步:將3d模型以參考點(diǎn)為中心再旋轉(zhuǎn)到旋轉(zhuǎn)前的角度。從桌子3d模型縮放后的節(jié)點(diǎn)坐標(biāo)node_group_k1中挨個取節(jié)點(diǎn)坐標(biāo)(xk1,yk1,zk1),并對此節(jié)點(diǎn)坐標(biāo)分別圍繞y軸逆時針偏移角度α旋轉(zhuǎn)和圍繞z軸逆時針偏移角度β旋轉(zhuǎn)以及圍繞x軸以逆時針偏移角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開,此處不再贅述),假設(shè)此節(jié)點(diǎn)旋轉(zhuǎn)的坐標(biāo)為(xr2,yr2,zr2),xr2=0.5,yr2=5,zr2=0.75,,假設(shè)此時桌子3d模型旋轉(zhuǎn)后的坐標(biāo)為node_group_r2;
第六步:將3d模型以參考點(diǎn)為中心再平移到平移前的位置;從節(jié)點(diǎn)坐標(biāo)node_group_r2中挨個取節(jié)點(diǎn)坐標(biāo)(xr2,yr2,zr2),假設(shè)此獲取的節(jié)點(diǎn)平移到平移前的坐標(biāo)為(xt2,yt2,zt2),在x軸上的xt2的值=xr2+xc=0.5+0.5=1,在y軸上的yt2的值=y(tǒng)r2+yc=0+0=0,在z軸上的zt2的值=zr2+zc=0.75+0.5=1.25;最終得到所有節(jié)點(diǎn)平移到平移前的坐標(biāo),假設(shè)此時桌子3d模型平移后的坐標(biāo)為node_group_t2,最后將所有節(jié)點(diǎn)平移到平移前的坐標(biāo)node_group_t2傳輸給3d模型記錄器,以更新對應(yīng)的桌子3d模型的對象信息;
桌子3d模型在支撐面上的節(jié)點(diǎn)坐標(biāo)(xo,yo,zo)被縮放后的坐標(biāo)為(xt2,yt2,zt2),即(1,0,1.25),可以看出縮放的節(jié)點(diǎn)坐標(biāo)仍在支撐面上,即沒有產(chǎn)生嵌入或懸浮的問題;
步驟4.繪制3d模型。3d模型渲染器從3d模型記錄器中獲取桌子3d模型對象信息,并根據(jù)桌子3d模型的對象信息中更新后的節(jié)點(diǎn)坐標(biāo)node_group_t2繪制3d模型(3d模型繪制的具體技術(shù)方案在現(xiàn)有技術(shù)中已有公開,本發(fā)明不再贅述)。
實(shí)施例2:
對可動態(tài)自定義3d模型尺寸的系統(tǒng),同實(shí)施例1。
對安放在墻面上的空調(diào)3d模型的現(xiàn)實(shí)尺寸縮放,其步驟包括:
步驟1.初始化3d模型的對象信息。3d模型記錄器記錄了對象信息包括:空調(diào)3d模型各節(jié)點(diǎn)的坐標(biāo),3d模型的obb包圍盒長高寬,3d模型的obb包圍盒在xyz軸上的旋轉(zhuǎn)角度,3d模型的obb包圍盒中的平移參考點(diǎn)坐標(biāo),以及3d模型在現(xiàn)實(shí)世界中的實(shí)際長高寬;
步聚2.設(shè)置3d模型現(xiàn)實(shí)世界的尺寸。3d模型實(shí)際尺寸設(shè)置器從3d模型記錄器找到空調(diào)3d模型對象(尋找的方式可以但不限于:通過3d模型唯一標(biāo)識唯一定位到某一3d模型或者通過obb包圍盒的各節(jié)點(diǎn)的坐標(biāo)唯一定位到某一3d模型),假設(shè)此空調(diào)3d模型對象為objecta,并對空調(diào)3d模型objecta的現(xiàn)實(shí)世界中的長度或者寬度或者高度的尺寸進(jìn)行設(shè)置;然后將設(shè)置前的空調(diào)3d模型信息以及設(shè)置后的實(shí)際尺寸一并傳輸給3d模型節(jié)點(diǎn)坐標(biāo)計算器;
步聚3.計算3d模型變更后的各節(jié)點(diǎn)坐標(biāo)。
第一步:計算長寬高對縮放比例值。3d模型節(jié)點(diǎn)坐標(biāo)計算器從3d模型實(shí)際尺寸設(shè)置器中獲取空調(diào)3d模型objecta的設(shè)置前的3d模型信息以及設(shè)置后的實(shí)際尺寸,并根據(jù)更新后的3d模型現(xiàn)實(shí)世界中的長寬高的尺寸與更新前的3d模型現(xiàn)世界中的長寬高對應(yīng)的尺寸分別計算縮放比例值。假設(shè)長度的縮放比例值為kl,假設(shè)寬度的縮放比例值為kw,假設(shè)高度的縮放比例值為kh;
長度的縮放比例值kl=更新后的3d模型現(xiàn)實(shí)世界中的長度除以更新前的3d模型現(xiàn)實(shí)世界中的長度;比例值kl取值為正實(shí)數(shù),如果更新后與更新前的長度相同,則kl=1;假設(shè)更新后的3d模型現(xiàn)實(shí)世界中的長度0.75米,更新前的3d模型現(xiàn)實(shí)世界中的長度1.5米,則kl=0.5;
寬度的縮放比例值kw=更新后的3d模型現(xiàn)實(shí)世界中的寬度除以更新前的3d模型現(xiàn)實(shí)世界中的寬度;比例值kw取值為正實(shí)數(shù),如果更新后與更新前的寬度相同,則kw=1;假設(shè)更新后的3d模型現(xiàn)實(shí)世界中的寬度1米,更新前的3d模型現(xiàn)實(shí)世界中的寬度0.5米,則kw=2;
高度的縮放比例值kh=更新后的3d模型現(xiàn)實(shí)世界中的高度除以更新前的3d模型現(xiàn)實(shí)世界中的高度;比例值kh取值為正實(shí)數(shù),如果更新后與更新前的高度相同,則kh=1;假設(shè)更新后的3d模型現(xiàn)實(shí)世界中的高度1米,更新前的3d模型現(xiàn)實(shí)世界中的高度0.5米,則kh=2;
第二步:將3d模型中的參考點(diǎn)平移到坐標(biāo)原點(diǎn)。假設(shè)空調(diào)3d模型objecta對應(yīng)的參考點(diǎn)坐標(biāo)為(xc,yc,zc),xc和yc以及zc分別是參考點(diǎn)在x軸y軸z軸上的坐標(biāo)值,假設(shè)x軸坐標(biāo)為2表示墻面的坐標(biāo),則在地面上的參考點(diǎn)坐標(biāo)假設(shè)為xc=2,yc=10,zc=1。。則參考點(diǎn)平移到坐標(biāo)原點(diǎn)時在x軸y軸z軸上分別需要平移的向量坐標(biāo)為-xc、-yc以及-zc。假設(shè)3d模型objecta的對象信息中的所有節(jié)點(diǎn)坐標(biāo)為node_group_old,從節(jié)點(diǎn)坐標(biāo)node_group_old中挨個取節(jié)點(diǎn)坐標(biāo),假設(shè)獲取的節(jié)點(diǎn)坐標(biāo)為(xo,yo,zo),xo=2,yo=12,zo=1.5,,假設(shè)此獲取的節(jié)點(diǎn)跟隨參考點(diǎn)平移后的坐標(biāo)為(xt1,yt1,zt1),即在x軸上的xt1的坐標(biāo)值=xo-xc=2-2=0,在y軸上的yt1的值=y(tǒng)o-yc=12-10=2,在z軸上的zt1的值=zo-zc=1.5-1=0.5;最終得到所有節(jié)點(diǎn)平移到坐標(biāo)原點(diǎn)的坐標(biāo),假設(shè)此時平移后的空調(diào)3d模型的坐標(biāo)為node_group_t1;
第三步:將3d模型的obb包圍盒將長高寬的標(biāo)尺線分別旋轉(zhuǎn)至與xyz軸平行。假設(shè)當(dāng)前的空調(diào)3d模型objecta的obb包圍盒圍繞y軸逆時針偏移角度為α、圍繞z軸的逆時針偏移角度為β,圍繞x軸的逆時針偏移角度為γ,假設(shè)α=90,β=0,γ=0;從空調(diào)3d模型平移后的節(jié)點(diǎn)坐標(biāo)node_group_t1中挨個取節(jié)點(diǎn)坐標(biāo)(xt1,yt1,zt1),并對此節(jié)點(diǎn)坐標(biāo)分別按y軸以順時針偏移角度α旋轉(zhuǎn)和按z軸以順時針偏移角度β旋轉(zhuǎn)以及按x軸以以順時針偏移角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開,此處不再贅述),假設(shè)此節(jié)點(diǎn)旋轉(zhuǎn)的坐標(biāo)為(xr1,yr1,zr1),則xr1=-0.5,yr1=2,zr1=0,最終得到所有節(jié)點(diǎn)旋轉(zhuǎn)到與坐標(biāo)軸平行的坐標(biāo),假設(shè)此時空調(diào)3d模型旋轉(zhuǎn)后的坐標(biāo)為node_group_r1;
第四步:將3d模型的節(jié)點(diǎn)坐標(biāo)分別在xyz軸上進(jìn)行縮放。從空調(diào)3d模型旋轉(zhuǎn)后的節(jié)點(diǎn)坐標(biāo)node_group_r1中挨個取節(jié)點(diǎn)坐標(biāo)(xr1,yr1,zr1),并對此節(jié)點(diǎn)坐標(biāo)按比例值進(jìn)行縮放,假設(shè)縮放后的節(jié)點(diǎn)坐標(biāo)為(xk1,yk1,zk1),因?yàn)樾D(zhuǎn)后的空調(diào)3d模型的obb包圍盒的長高寬的標(biāo)尺線分別與xyz軸平行,因此,在x軸上的xk1的值=xr1乘以長度縮放比例值kl=-0.5*0.5=-0.25,在y軸上的yk1的值=y(tǒng)r1乘以高度縮放比例值kh=2*2=4,在z軸上的zk1的值=zr1乘以寬度縮放比例值kw=0*2=0;最終得到所有節(jié)點(diǎn)縮放后的坐標(biāo),假設(shè)此時空調(diào)3d模型縮放后坐標(biāo)為node_group_k1;
第五步:將3d模型以參考點(diǎn)為中心再旋轉(zhuǎn)到旋轉(zhuǎn)前的角度。從空調(diào)3d模型縮放后的節(jié)點(diǎn)坐標(biāo)node_group_k1中挨個取節(jié)點(diǎn)坐標(biāo)(xk1,yk1,zk1),并對此節(jié)點(diǎn)坐標(biāo)分別圍繞y軸逆時針偏移角度α旋轉(zhuǎn)和圍繞z軸逆時針偏移角度β旋轉(zhuǎn)以及圍繞x軸以逆時針偏移角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開,此處不再贅述),假設(shè)此節(jié)點(diǎn)旋轉(zhuǎn)的坐標(biāo)為(xr2,yr2,zr2),xr2=0,yr2=4,zr2=0.25,假設(shè)此時空調(diào)3d模型旋轉(zhuǎn)后的坐標(biāo)為node_group_r2;
第六步:將空調(diào)3d模型以參考點(diǎn)為中心再平移到平移前的位置;從節(jié)點(diǎn)坐標(biāo)node_group_r2中挨個取節(jié)點(diǎn)坐標(biāo)(xr2,yr2,zr2),假設(shè)此獲取的節(jié)點(diǎn)平移到平移前的坐標(biāo)為(xt2,yt2,zt2),在x軸上的xt2的值=xr2+xc=0+2=2,在y軸上的yt2的值=y(tǒng)r2+yc=4+10=14,在z軸上的zt2的值=zr2+zc=0.25+1=1.25;最終得到所有節(jié)點(diǎn)平移到平移前的坐標(biāo),假設(shè)此時空調(diào)3d模型平移后的坐標(biāo)為node_group_t2,最后將所有節(jié)點(diǎn)平移到平移前的坐標(biāo)node_group_t2傳輸給3d模型記錄器,以更新對應(yīng)的空調(diào)3d模型的對象信息;
空調(diào)3d模型在支撐面上的節(jié)點(diǎn)坐標(biāo)(xo,yo,zo)被縮放后的坐標(biāo)為(xt2,yt2,zt2),即(2,14,1.25),可以看出縮放的節(jié)點(diǎn)坐標(biāo)仍在支撐面上,即沒有產(chǎn)生嵌入或懸浮的問題;
步驟4.繪制3d模型。3d模型渲染器從3d模型記錄器中獲取空調(diào)3d模型對象信息,并根據(jù)空調(diào)3d模型對象信息中更新后的節(jié)點(diǎn)坐標(biāo)node_group_t2繪制3d模型(3d模型繪制的具體技術(shù)方案在現(xiàn)有技術(shù)中已有公開,本發(fā)明不再贅述)。
實(shí)施例3:
對可動態(tài)自定義3d模型尺寸的系統(tǒng),同實(shí)施例1,對安放在房頂上的吸頂燈3d模型的現(xiàn)實(shí)尺寸縮放,其步驟包括:
步驟1.初始化3d模型的對象信息。3d模型記錄器記錄了對象信息包括:3d模型各節(jié)點(diǎn)的坐標(biāo),3d模型的obb包圍盒長高寬,3d模型的obb包圍盒在xyz軸上的旋轉(zhuǎn)角度,3d模型的obb包圍盒中的平移參考點(diǎn)坐標(biāo),以及3d模型在現(xiàn)實(shí)世界中的實(shí)際長高寬;
步聚2.設(shè)置3d模型現(xiàn)實(shí)世界的尺寸。3d模型實(shí)際尺寸設(shè)置器從3d模型記錄器找到吸頂燈3d模型對象(尋找的方式可以但不限于:通過3d模型唯一標(biāo)識唯一定位到某一3d模型或者通過obb包圍盒的各節(jié)點(diǎn)的坐標(biāo)唯一定位到某一3d模型),假設(shè)此吸頂燈3d模型對象為objecta,并對此吸頂燈3d模型objecta的現(xiàn)實(shí)世界中的長度或者寬度或者高度的尺寸進(jìn)行設(shè)置;然后將設(shè)置前的吸頂燈3d模型信息以及設(shè)置后的實(shí)際尺寸一并傳輸給3d模型節(jié)點(diǎn)坐標(biāo)計算器;
步聚3.計算3d模型變更后的各節(jié)點(diǎn)坐標(biāo)。
第一步:計算長寬高對縮放比例值。3d模型節(jié)點(diǎn)坐標(biāo)計算器從3d模型實(shí)際尺寸設(shè)置器中獲取桌子3d模型objecta的設(shè)置前的3d模型信息以及設(shè)置后的實(shí)際尺寸,并根據(jù)更新后的桌子3d模型現(xiàn)實(shí)世界中的長寬高的尺寸與更新前的3d模型現(xiàn)世界中的長寬高對應(yīng)的尺寸分別計算縮放比例值。假設(shè)長度的縮放比例值為kl,假設(shè)寬度的縮放比例值為kw,假設(shè)高度的縮放比例值為kh;
長度的縮放比例值kl=更新后的3d模型現(xiàn)實(shí)世界中的長度除以更新前的3d模型現(xiàn)實(shí)世界中的長度;比例值kl取值為正實(shí)數(shù),如果更新后與更新前的長度相同,則kl=1;假設(shè)更新后的3d模型現(xiàn)實(shí)世界中的長度1.5米,更新前的3d模型現(xiàn)實(shí)世界中的長度3米,則kl=0.5;
寬度的縮放比例值kw=更新后的3d模型現(xiàn)實(shí)世界中的寬度除以更新前的3d模型現(xiàn)實(shí)世界中的寬度;比例值kw取值為正實(shí)數(shù),如果更新后與更新前的寬度相同,則kw=1;假設(shè)更新后的3d模型現(xiàn)實(shí)世界中的寬度1米,更新前的3d模型現(xiàn)實(shí)世界中的寬度1米,則kw=1;
高度的縮放比例值kh=更新后的3d模型現(xiàn)實(shí)世界中的高度除以更新前的3d模型現(xiàn)實(shí)世界中的高度;比例值kh取值為正實(shí)數(shù),如果更新后與更新前的高度相同,則kh=1;假設(shè)更新后的3d模型現(xiàn)實(shí)世界中的高度1米,更新前的3d模型現(xiàn)實(shí)世界中的高度0.5米,則kh=2;
第二步:將3d模型中的參考點(diǎn)平移到坐標(biāo)原點(diǎn)。假設(shè)桌子3d模型objecta對應(yīng)的參考點(diǎn)坐標(biāo)為(xc,yc,zc),xc和yc以及zc分別是參考點(diǎn)在x軸y軸z軸上的坐標(biāo)值,假設(shè)y軸坐標(biāo)為10表示房頂?shù)淖鴺?biāo),則在地面上的參考點(diǎn)坐標(biāo)假設(shè)為xc=0.5,yc=10,zc=0.5。則參考點(diǎn)平移到坐標(biāo)原點(diǎn)時在x軸y軸z軸上分別需要平移的向量坐標(biāo)為-xc、-yc以及-zc。假設(shè)桌子3d模型objecta的對象信息中的所有節(jié)點(diǎn)坐標(biāo)為node_group_old,從節(jié)點(diǎn)坐標(biāo)node_group_old中挨個取節(jié)點(diǎn)坐標(biāo),假設(shè)從支撐面上獲取的節(jié)點(diǎn)坐標(biāo)為xt2,yt2,zt2,xo=1,yo=10,zo=2,,假設(shè)此獲取的節(jié)點(diǎn)跟隨參考點(diǎn)平移后的坐標(biāo)為(xt1,yt1,zt1),即在x軸上的xt1的坐標(biāo)值=xo-xc=1-0.5=0.5,在y軸上的yt1的值=y(tǒng)o-yc=10-10=0,在z軸上的zt1的值=zo-zc=2-0.5=1.5;最終得到所有節(jié)點(diǎn)平移到坐標(biāo)原點(diǎn)的坐標(biāo),假設(shè)此時平移后的吸頂燈3d模型的坐標(biāo)為node_group_t1;
第三步:將3d模型的obb包圍盒將長高寬的標(biāo)尺線分別旋轉(zhuǎn)至與xyz軸平行。假設(shè)當(dāng)前的吸頂燈3d模型objecta的obb包圍盒圍繞y軸逆時針偏移角度為α、圍繞z軸的逆時針偏移角度為β,圍繞x軸的逆時針偏移角度為γ,假設(shè)α=90,β=0,γ=0;從桌子3d模型平移后的節(jié)點(diǎn)坐標(biāo)node_group_t1中挨個取節(jié)點(diǎn)坐標(biāo)(xt1,yt1,zt1),并對此節(jié)點(diǎn)坐標(biāo)分別按y軸以順時針偏移角度α旋轉(zhuǎn)和按z軸以順時針偏移角度β旋轉(zhuǎn)以及按x軸以順時針偏移角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開,此處不再贅述),假設(shè)此節(jié)點(diǎn)旋轉(zhuǎn)的坐標(biāo)為(xr1,yr1,zr1),則xr1=-1.5,yr1=0,zr1=0.5,最終得到所有節(jié)點(diǎn)旋轉(zhuǎn)到與坐標(biāo)軸平行的坐標(biāo),假設(shè)此時吸頂燈3d模型旋轉(zhuǎn)后的坐標(biāo)為node_group_r1:
第四步:將3d模型的節(jié)點(diǎn)坐標(biāo)分別在xyz軸上進(jìn)行縮放。從吸頂燈3d模型旋轉(zhuǎn)后的節(jié)點(diǎn)坐標(biāo)node_group_r1中挨個取節(jié)點(diǎn)坐標(biāo)(xr1,yr1,zr1),并對此節(jié)點(diǎn)坐標(biāo)按比例值進(jìn)行縮放,假設(shè)縮放后的節(jié)點(diǎn)坐標(biāo)為(xk1,yk1,zk1),因?yàn)樾D(zhuǎn)后的桌子3d模型的obb包圍盒的長高寬的標(biāo)尺線分別與xyz軸平行,因此,在x軸上的xk1的值=xr1乘以長度縮放比例值kl=-1.5*0.5=-0.75,在y軸上的yk1的值=y(tǒng)r1乘以高度縮放比例值kh=0*2=0,在z軸上的zk1的值=zr1乘以寬度縮放比例值kw=0.5*1=0.5;最終得到所有節(jié)點(diǎn)縮放后的坐標(biāo),假設(shè)此時吸頂燈3d模型縮放后坐標(biāo)為node_group_k1;
第五步:將3d模型以參考點(diǎn)為中心再旋轉(zhuǎn)到旋轉(zhuǎn)前的角度。從吸頂燈3d模型縮放后的節(jié)點(diǎn)坐標(biāo)node_group_k1中挨個取節(jié)點(diǎn)坐標(biāo)(xk1,yk1,zk1),并對此節(jié)點(diǎn)坐標(biāo)分別圍繞y軸逆時針旋轉(zhuǎn)角度α旋轉(zhuǎn)和圍繞z軸逆時針旋轉(zhuǎn)角度β旋轉(zhuǎn)以及圍繞x軸以逆時針旋轉(zhuǎn)角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開,此處不再贅述),假設(shè)此節(jié)點(diǎn)旋轉(zhuǎn)的坐標(biāo)為(xr2,yr2,zr2),xr2=0.5,yr2=5,zr2=0.75,,假設(shè)此時吸頂燈3d模型旋轉(zhuǎn)后的坐標(biāo)為node_group_r2;
第六步:將3d模型以參考點(diǎn)為中心再平移到平移前的位置;從節(jié)點(diǎn)坐標(biāo)node_group_r2中挨個取節(jié)點(diǎn)坐標(biāo)(xr2,yr2,zr2),假設(shè)此獲取的節(jié)點(diǎn)平移到平移前的坐標(biāo)為(xt2,yt2,zt2),在x軸上的xt2的值=xr2+xc=0.5+0.5=1,在y軸上的yt2的值=y(tǒng)r2+yc=0+10=10,在z軸上的zt2的值=zr2+zc=0.75+0.5=1.25;最終得到所有節(jié)點(diǎn)平移到平移前的坐標(biāo),假設(shè)此時吸頂燈3d模型平移后的坐標(biāo)為node_group_t2,最后將所有節(jié)點(diǎn)平移到平移前的坐標(biāo)node_group_t2傳輸給3d模型記錄器,以更新對應(yīng)的吸頂燈3d模型的對象信息;
吸頂燈3d模型在支撐面上的節(jié)點(diǎn)坐標(biāo)(xo,yo,zo)被縮放后的坐標(biāo)為(xt2,yt2,zt2),即(1,10,1.25),可以看出縮放的節(jié)點(diǎn)坐標(biāo)仍在支撐面上,即沒有產(chǎn)生嵌入或懸浮的問題;
步驟4.繪制3d模型。3d模型渲染器從3d模型記錄器中獲取吸頂燈3d模型對象信息,并根據(jù)吸頂燈3d模型對象信息中更新后的節(jié)點(diǎn)坐標(biāo)node_group_t2繪制3d模型(3d模型繪制的具體技術(shù)方案在現(xiàn)有技術(shù)中已有公開,本發(fā)明不再贅述)。