国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種可動(dòng)態(tài)自定義3D模型尺寸的系統(tǒng)和方法與流程

      文檔序號(hào):11234961閱讀:590來(lái)源:國(guó)知局
      一種可動(dòng)態(tài)自定義3D模型尺寸的系統(tǒng)和方法與流程

      本發(fā)明涉及一種對(duì)3d模型的尺寸可動(dòng)態(tài)變更的3d虛擬現(xiàn)實(shí)建模方法,尤其涉及到一種可動(dòng)態(tài)自定義3d模型尺寸的系統(tǒng)和方法,在居室3d模型中對(duì)家具3d模型的長(zhǎng)寬高的尺寸進(jìn)行動(dòng)態(tài)修改后,其對(duì)應(yīng)的3d模型會(huì)根據(jù)修改后的最新尺寸進(jìn)行重新渲染的方法。



      背景技術(shù):

      隨時(shí)人們追求更加逼真的虛擬現(xiàn)實(shí)的體驗(yàn)欲望的強(qiáng)烈,3d的虛擬現(xiàn)實(shí)技術(shù)也隨之普及。在3d模型設(shè)計(jì)過(guò)程中,時(shí)常需要對(duì)3d模型的尺寸進(jìn)行修改。對(duì)于3d模型的尺寸修改在現(xiàn)有3d設(shè)計(jì)軟件中已支持的很好,如:3dmax等,但是這些技術(shù)方案存在以下兩個(gè)問(wèn)題:

      (1)現(xiàn)有技術(shù)中,只支持基于3d模型在坐標(biāo)系中的坐標(biāo)尺寸修改,但用戶想要的是基于現(xiàn)實(shí)世界中真實(shí)的尺寸進(jìn)行修改;因此,現(xiàn)有技術(shù)都是通過(guò)人工將現(xiàn)實(shí)中的真實(shí)尺寸轉(zhuǎn)換為3d模型坐標(biāo)尺寸,再根據(jù)3d模型坐標(biāo)尺寸進(jìn)行修改;這種將現(xiàn)實(shí)世界的尺寸與虛擬世界中的坐標(biāo)尺寸的轉(zhuǎn)換是一個(gè)3d坐標(biāo)映射過(guò)程,這就需要使用者有一定的3d數(shù)學(xué)以及3d設(shè)計(jì)的知識(shí),這無(wú)疑增加了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)象,因此,仍需要再次通過(guò)人工對(duì)其進(jìn)行平移;這種方式會(huì)導(dǎo)致需要人工反復(fù)調(diào)整位置并且最終的3d模型的位置仍可能存在一定的誤差;

      在現(xiàn)有的居室3d模型建模技術(shù)中,因?yàn)樯鲜鰡?wèn)題無(wú)法得到很好的解決,因此一些非專業(yè)的3d設(shè)計(jì)軟件索性就不支持3d模型尺寸修改的功能了,以致3d模型一旦被加載,其尺寸就再也無(wú)法變更,導(dǎo)致因3d模型的尺寸固定而無(wú)法滿足真實(shí)世界的模擬需求,因此一旦因?yàn)槌叽绮灰恢碌?d模型就需要重新創(chuàng)建一個(gè)新的3d模型進(jìn)行重新加載,整個(gè)過(guò)程效率低下,以致無(wú)法滿足用戶diy的3d建模的需求。



      技術(shù)實(shí)現(xiàn)要素:

      1.發(fā)明要解決的技術(shù)問(wèn)題

      針對(duì)現(xiàn)有技術(shù)中所提及的在居室3d模型建模中,3d模型的尺寸修改需要通過(guò)人工將現(xiàn)實(shí)中的真實(shí)尺寸轉(zhuǎn)換為3d模型坐標(biāo)尺寸進(jìn)行修改以及修改尺寸后經(jīng)常需要再次通過(guò)人工對(duì)其反復(fù)調(diào)整位置的問(wèn)題,導(dǎo)致其操作十分繁瑣的問(wèn)題,對(duì)人工浪費(fèi)極大,本發(fā)明提供一種可動(dòng)態(tài)自定義3d模型尺寸的系統(tǒng)和方法,即在居室3d模型中對(duì)家具3d模型的現(xiàn)實(shí)世界的長(zhǎng)寬高的尺寸進(jìn)行動(dòng)態(tài)修改后,其對(duì)應(yīng)的3d模型會(huì)自動(dòng)修改其坐標(biāo)系統(tǒng)尺寸并自動(dòng)對(duì)其平移的方法。

      2.技術(shù)方案

      本發(fā)明對(duì)可動(dòng)態(tài)自定義3d模型尺寸的系統(tǒng)和方法的技術(shù)方案進(jìn)行了充分公開(kāi),其技術(shù)方案如下:

      對(duì)可動(dòng)態(tài)自定義3d模型尺寸的系統(tǒng),包括4個(gè)模塊,即3d模型記錄器、3d模型實(shí)際尺寸設(shè)置器、3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器和3d模型渲染器;

      3d模型記錄器:記錄3d模型的對(duì)象信息,3d模型的對(duì)象信息包括:

      (1)3d模型各節(jié)點(diǎn)的坐標(biāo);

      (2)3d模型的obb包圍盒長(zhǎng)高寬;假設(shè)3d模型在剛被加載時(shí)對(duì)應(yīng)obb包圍盒的長(zhǎng)高寬的標(biāo)尺線分別與x、y、z坐標(biāo)軸平行,則平行于x軸的標(biāo)尺線段在x軸上的投影線段長(zhǎng)度即為3d模型的長(zhǎng),平行于y軸的標(biāo)尺線段在y軸上的投影線段長(zhǎng)度即為3d模型的高,平行于z軸的標(biāo)尺線段在z軸上的投影線段長(zhǎng)度即為3d模型的寬;

      (3)3d模型的obb包圍盒分別在x、y、z軸上的旋轉(zhuǎn)角度;假設(shè)3d模型剛被加載時(shí)對(duì)應(yīng)obb包圍盒的長(zhǎng)高寬的標(biāo)尺線分別與x、y、z坐標(biāo)軸平行,則在x、y、z軸上的旋轉(zhuǎn)角度皆為0,后續(xù)可以對(duì)其分別按x軸或y軸或z軸進(jìn)行旋轉(zhuǎn),其旋轉(zhuǎn)的角度即為在對(duì)應(yīng)坐標(biāo)軸上的旋轉(zhuǎn)角度;

      (4)3d模型的obb包圍盒中的平移參考點(diǎn)坐標(biāo);平移參考點(diǎn)可以是3d模型的obb包圍盒中的任意一點(diǎn),但在房屋的場(chǎng)景中,一般以與支撐物相接觸的3d模型的obb包圍盒的那個(gè)面的中心點(diǎn)作為平移參考點(diǎn);

      (5)3d模型在現(xiàn)實(shí)世界中的實(shí)際長(zhǎng)高寬;此實(shí)際長(zhǎng)高寬的值一般通過(guò)預(yù)先設(shè)置,在3d模型加載時(shí),一并與3d模型其他信息一并讀入;

      3d模型實(shí)際尺寸設(shè)置器:從3d模型記錄器獲取對(duì)應(yīng)的3d模型的對(duì)象信息,并對(duì)其現(xiàn)實(shí)世界中的尺寸進(jìn)行設(shè)置;然后將設(shè)置前的3d模型的對(duì)象信息以及設(shè)置后的實(shí)際尺寸一并傳輸給3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器;

      3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器:根據(jù)從3d模型實(shí)際尺寸設(shè)置器中獲取的設(shè)置前的3d模型的對(duì)象信息以及設(shè)置后的實(shí)際尺寸計(jì)算變更后的3d模型各節(jié)點(diǎn)的坐標(biāo);并將變更后的3d模型各節(jié)點(diǎn)的坐標(biāo)傳輸給3d模型記錄器,以更新對(duì)應(yīng)的3d模型的對(duì)象信息;

      3d模型渲染器:根據(jù)從3d模型記錄器獲取3d模型的對(duì)象信息對(duì)3d模型進(jìn)行繪制。

      可動(dòng)態(tài)自定義3d模型尺寸的方法,其步驟包括:

      步驟1.初始化3d模型的對(duì)象信息:3d模型記錄器記錄了3d模型的對(duì)象信息包括:3d模型各節(jié)點(diǎn)的坐標(biāo),3d模型的obb包圍盒長(zhǎng)高寬,3d模型的obb包圍盒在x、y、z軸上的旋轉(zhuǎn)角度,3d模型的obb包圍盒中的平移參考點(diǎn)坐標(biāo),以及3d模型在現(xiàn)實(shí)世界中的實(shí)際長(zhǎng)、高、寬;

      步聚2.設(shè)置3d模型現(xiàn)實(shí)世界的尺寸:3d模型實(shí)際尺寸設(shè)置器從3d模型記錄器找到對(duì)應(yīng)的3d模型對(duì)象(尋找的方式可以但不限于:通過(guò)3d模型唯一標(biāo)識(shí)唯一定位到某一3d模型或者通過(guò)obb包圍盒的各節(jié)點(diǎn)的坐標(biāo)唯一定位到某一3d模型),假設(shè)此3d模型對(duì)象為objecta,并對(duì)此3d模型objecta的現(xiàn)實(shí)世界中的長(zhǎng)度或者寬度或者高度的尺寸進(jìn)行設(shè)置;然后將設(shè)置前的3d模型的對(duì)象信息以及設(shè)置后的實(shí)際尺寸一并傳輸給3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器;

      步聚3.計(jì)算3d模型變更后的各節(jié)點(diǎn)坐標(biāo):

      第一步:計(jì)算長(zhǎng)寬高的縮放比例值。3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器從3d模型實(shí)際尺寸設(shè)置器中獲取3d模型objecta的設(shè)置前的3d模型的對(duì)象信息以及設(shè)置后的實(shí)際尺寸,并根據(jù)更新后的3d模型現(xiàn)實(shí)世界中的長(zhǎng)寬高的尺寸與更新前的3d模型現(xiàn)世界中的長(zhǎng)寬高對(duì)應(yīng)的尺寸分別計(jì)算縮放比例值,假設(shè)長(zhǎng)度的縮放比例值為kl,假設(shè)寬度的縮放比例值為kw,假設(shè)高度的縮放比例值為kh;

      長(zhǎng)度的縮放比例值kl=更新后的3d模型現(xiàn)實(shí)世界中的長(zhǎng)度除以更新前的3d模型現(xiàn)實(shí)世界中的長(zhǎng)度;比例值kl取值為正實(shí)數(shù),如果更新后與更新前的長(zhǎng)度相同,則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對(duì)應(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)時(shí)在x軸、y軸、z軸上分別需要平移的向量坐標(biāo)為-xc、-yc以及-zc。假設(shè)3d模型objecta的對(duì)象信息中的所有節(jié)點(diǎn)坐標(biāo)為node_group_old,從節(jié)點(diǎn)坐標(biāo)node_group_old中挨個(gè)取節(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è)此時(shí)平移后的3d模型的坐標(biāo)為node_group_t1;

      第三步:將3d模型的obb包圍盒將長(zhǎng)高寬的標(biāo)尺線分別旋轉(zhuǎn)至與x、y、z軸平行。假設(shè)當(dāng)前的3d模型objecta的obb包圍盒圍繞y軸逆時(shí)針偏移角度為α、圍繞z軸的逆時(shí)針偏移角度為β,圍繞x軸的逆時(shí)針偏移角度為γ;從3d模型平移后的節(jié)點(diǎn)坐標(biāo)node_group_t1中挨個(gè)取節(jié)點(diǎn)坐標(biāo)(xt1,yt1,zt1),并對(duì)此節(jié)點(diǎn)坐標(biāo)分別按y軸以順時(shí)針偏移角度α旋轉(zhuǎn)和按z軸以順時(shí)針偏移角度β旋轉(zhuǎn)以及按x軸以順時(shí)針偏移角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開(kāi),此處不再贅述),假設(shè)此節(jié)點(diǎn)旋轉(zhuǎn)的坐標(biāo)為(xr1,yr1,zr1),最終得到所有節(jié)點(diǎn)旋轉(zhuǎn)到與坐標(biāo)軸平行的坐標(biāo),假設(shè)此時(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中挨個(gè)取節(jié)點(diǎn)坐標(biāo)(xr1,yr1,zr1),并對(duì)此節(jié)點(diǎn)坐標(biāo)按比例值進(jìn)行縮放,假設(shè)縮放后的節(jié)點(diǎn)坐標(biāo)為(xk1,yk1,zk1),因?yàn)樾D(zhuǎn)后的3d模型的obb包圍盒的長(zhǎng)高寬的標(biāo)尺線分別與x、y、z軸平行,因此,在x軸上的xk1的值=xr1乘以長(zhǎng)度縮放比例值kl,在y軸上的yk1的值=y(tǒng)r1乘以高度縮放比例值kh,在z軸上的zk1的值=zr1乘以寬度縮放比例值kw;最終得到所有節(jié)點(diǎn)縮放后的坐標(biāo),假設(shè)此時(shí)3d模型縮放后坐標(biāo)為node_group_k1;

      第五步:將3d模型以參考點(diǎn)為中心再旋轉(zhuǎn)到旋轉(zhuǎn)前的角度。從3d模型縮放后的節(jié)點(diǎn)坐標(biāo)node_group_k1中挨個(gè)取節(jié)點(diǎn)坐標(biāo)(xk1,yk1,zk1),并對(duì)此節(jié)點(diǎn)坐標(biāo)分別圍繞y軸逆時(shí)針偏移角度α旋轉(zhuǎn)和圍繞z軸逆時(shí)針偏移角度β旋轉(zhuǎn)以及圍繞x軸以逆時(shí)針偏移角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開(kāi),此處不再贅述),假設(shè)此節(jié)點(diǎn)旋轉(zhuǎn)的坐標(biāo)為(xr2,yr2,zr2),假設(shè)此時(shí)3d模型旋轉(zhuǎn)后的坐標(biāo)為node_group_r2;

      第六步:將3d模型以參考點(diǎn)為中心再平移到平移前的位置;從節(jié)點(diǎn)坐標(biāo)node_group_r2中挨個(gè)取節(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è)此時(shí)3d模型平移后的坐標(biāo)為node_group_t2,最后將所有節(jié)點(diǎn)平移到平移前的坐標(biāo)node_group_t2傳輸給3d模型記錄器,以更新對(duì)應(yīng)的3d模型的對(duì)象信息;

      另,以上步驟中提涉的“先根據(jù)參考點(diǎn)平移至坐標(biāo)原點(diǎn)的位移對(duì)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)的位移對(duì)3d模型各節(jié)點(diǎn)進(jìn)行平移”;因此,不管是“先平移后旋轉(zhuǎn)”還是“先旋轉(zhuǎn)后平移”的技術(shù)方案部落在本發(fā)明的技術(shù)方案中;

      步驟4.繪制3d模型。3d模型渲染器從3d模型記錄器中獲取3d模型的對(duì)象信息,并根據(jù)3d模型對(duì)象信息中更新后的節(jié)點(diǎn)坐標(biāo)node_group_t2繪制3d模型(3d模型繪制的具體技術(shù)方案在現(xiàn)有技術(shù)中已有公開(kāi),本發(fā)明不再贅述);

      上述的步驟4與步驟2或者步驟3沒(méi)有嚴(yán)格的先后次序。

      3.有益效果

      現(xiàn)有技術(shù)中,隨時(shí)人們追求更加逼真的虛擬現(xiàn)實(shí)的體驗(yàn)欲望的強(qiáng)烈,3d的虛擬現(xiàn)實(shí)技術(shù)也隨之普及。尤其在居室3d模型建模技術(shù)中,3d模型的尺寸修改需要通過(guò)人工將現(xiàn)實(shí)世界中的真實(shí)尺寸轉(zhuǎn)換為3d模型坐標(biāo)尺寸進(jìn)行修改以及修改尺寸后經(jīng)常需要再次通過(guò)人工對(duì)其進(jìn)行平移的問(wèn)題,整個(gè)過(guò)程效率低下,以致無(wú)法滿足普通用戶diy的3d建模的設(shè)計(jì)需求。本發(fā)明的一種對(duì)3d模型的尺寸可動(dòng)態(tài)變更的方法的創(chuàng)新性具體體現(xiàn)在:

      本發(fā)明提供了3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器,此模塊有兩大優(yōu)點(diǎn),具體如下:

      本模塊提供了一種3d模型的對(duì)應(yīng)實(shí)物在現(xiàn)實(shí)世界中的尺寸與其在3d坐標(biāo)系中的虛擬尺寸的自動(dòng)關(guān)聯(lián)的方法,并通過(guò)用戶對(duì)現(xiàn)實(shí)世界的真實(shí)長(zhǎng)寬高尺寸的設(shè)置,根據(jù)此關(guān)聯(lián)信息自動(dòng)將被更新后的現(xiàn)實(shí)世界的真實(shí)尺寸轉(zhuǎn)換為3d模型在3d坐標(biāo)中虛擬尺寸,并對(duì)3d模型各節(jié)點(diǎn)坐標(biāo)自動(dòng)進(jìn)行平移各縮放等操作,以達(dá)到對(duì)3d模型按長(zhǎng)寬高進(jìn)行自動(dòng)縮放的效果,解決了現(xiàn)有技術(shù)中3d模型的尺寸修改需要通過(guò)人工將現(xiàn)實(shí)世界中的真實(shí)尺寸轉(zhuǎn)換為3d模型坐標(biāo)尺寸進(jìn)行修改的問(wèn)題,以達(dá)到用戶只需關(guān)注3d模型對(duì)應(yīng)真實(shí)世界中的尺寸不再需要關(guān)注3d模型在3d坐標(biāo)系中的虛擬尺寸。

      本發(fā)明提供一種對(duì)3d模型按參考點(diǎn)進(jìn)行縮放的方法,即依據(jù)對(duì)家具3d模型的平移參考點(diǎn)坐標(biāo)保持不變、對(duì)3d模型的長(zhǎng)寬高的尺寸進(jìn)行自動(dòng)縮放的方法,解決了修改尺寸后經(jīng)常導(dǎo)致3d模型嵌入或懸浮于支撐物以致需要再次通過(guò)人工對(duì)其進(jìn)行平移的問(wèn)題,以達(dá)到只需要在與支撐物接觸的3d模型obb包圍盒的面上選擇參考點(diǎn),即可實(shí)現(xiàn)縮放后的3d模型的原obb包圍盒的接觸面仍與支撐物保持接觸,即實(shí)現(xiàn)縮放后的3d模型不再嵌入或懸浮于支撐物的問(wèn)題;

      綜上,本發(fā)明提供的可動(dòng)態(tài)自定義3d模型尺寸的方法,簡(jiǎn)化了人工的參與,即降低了用戶的操作成本,大大提升了用戶對(duì)3d模型的操作體驗(yàn)。

      附圖說(shuō)明

      圖1為本發(fā)明的尺寸變更后3d模型進(jìn)行縮放示意圖;

      圖2為本發(fā)明所涉及的標(biāo)尺線示意圖;

      圖3為本發(fā)明所涉及的系統(tǒng)模塊圖;

      圖4為本發(fā)明的算法流程圖。

      具體實(shí)施方式

      實(shí)施例1:

      以對(duì)安放在地面上的桌子3d模型的現(xiàn)實(shí)尺寸縮放為例

      下面結(jié)合圖1-4對(duì)本發(fā)明做進(jìn)一步的詳細(xì)說(shuō)明,以令本領(lǐng)域技術(shù)人員參照說(shuō)明書(shū)文字能夠據(jù)以實(shí)施。

      對(duì)可動(dòng)態(tài)自定義3d模型尺寸的系統(tǒng),包括4個(gè)模塊,即3d模型記錄器、3d模型實(shí)際尺寸設(shè)置器、3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器和3d模型渲染器;涉及各模塊的簡(jiǎn)要技術(shù)如下:

      3d模型記錄器:記錄3d模型的對(duì)象信息,3d模型的對(duì)象信息包括:

      1)3d模型各節(jié)點(diǎn)的坐標(biāo);

      2)3d模型的obb包圍盒長(zhǎng)、高、寬;假設(shè)3d模型在剛被加載時(shí)對(duì)應(yīng)obb包圍盒的長(zhǎng)高寬的標(biāo)尺線分別與xyz坐標(biāo)軸平行,則平行于x軸的標(biāo)尺線段在x軸上的投影線段長(zhǎng)度即為3d模型的長(zhǎng),平行于y軸的標(biāo)尺線段在y軸上的投影線段長(zhǎng)度即為3d模型的高,平行于z軸的標(biāo)尺線段在z軸上的投影線段長(zhǎng)度即為3d模型的寬;

      3)3d模型的obb包圍盒在x、y、z軸上的旋轉(zhuǎn)角度;假設(shè)3d模型剛被加載時(shí)對(duì)應(yīng)obb包圍盒的長(zhǎng)高寬的標(biāo)尺線分別與xyz坐標(biāo)軸平行,則在xyz軸上的旋轉(zhuǎn)角度皆為0,后續(xù)可以對(duì)其分別按x軸或y軸或z軸進(jìn)行旋轉(zhuǎn),其旋轉(zhuǎn)的角度即為在對(duì)應(yīng)坐標(biāo)軸上的旋轉(zhuǎn)角度;

      4)3d模型的obb包圍盒中的平移參考點(diǎn)坐標(biāo);平移參考點(diǎn)可以是3d模型的obb包圍盒中的任意一點(diǎn),但在房屋的場(chǎng)景中,一般按與支撐物相接觸的3d模型的obb包圍盒的那個(gè)面的中心點(diǎn)作為平移參考點(diǎn);

      5)3d模型在現(xiàn)實(shí)世界中的實(shí)際長(zhǎng)高寬;此實(shí)際長(zhǎng)高寬的值一般通過(guò)預(yù)先設(shè)置,在3d模型加載時(shí),一并與3d模型其他信息一并讀入;

      3d模型實(shí)際尺寸設(shè)置器:從3d模型記錄器獲取對(duì)應(yīng)的3d模型的對(duì)象信息,并對(duì)其現(xiàn)實(shí)世界中的尺寸進(jìn)行設(shè)置;然后將設(shè)置前的3d模型的對(duì)象信息以及設(shè)置后的實(shí)際尺寸一并傳輸給3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器;

      3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器:根據(jù)從3d模型實(shí)際尺寸設(shè)置器中獲取的設(shè)置前的3d模型的對(duì)象信息以及設(shè)置后的實(shí)際尺寸計(jì)算變更后的3d模型各節(jié)點(diǎn)的坐標(biāo);并將變更后的3d模型各節(jié)點(diǎn)的坐標(biāo)傳輸給3d模型記錄器,以更新對(duì)應(yīng)的3d模型的對(duì)象信息;

      3d模型渲染器:根據(jù)從3d模型記錄器獲取3d模型的對(duì)象信息對(duì)3d模型進(jìn)行繪制。

      可動(dòng)態(tài)自定義3d模型尺寸的方法,其步驟包括:

      步驟1.初始化3d模型的對(duì)象信息。3d模型記錄器記錄了對(duì)象信息包括:3d模型各節(jié)點(diǎn)的坐標(biāo),3d模型的obb包圍盒長(zhǎng)高寬,3d模型的obb包圍盒在xyz軸上的旋轉(zhuǎn)角度,3d模型的obb包圍盒中的平移參考點(diǎn)坐標(biāo),以及3d模型在現(xiàn)實(shí)世界中的實(shí)際長(zhǎng)高寬;

      步聚2.設(shè)置3d模型現(xiàn)實(shí)世界的尺寸。3d模型實(shí)際尺寸設(shè)置器從3d模型記錄器找到桌子3d模型對(duì)象(尋找的方式可以但不限于:通過(guò)3d模型唯一標(biāo)識(shí)唯一定位到某一3d模型或者通過(guò)obb包圍盒的各節(jié)點(diǎn)的坐標(biāo)唯一定位到某一3d模型),假設(shè)此3d模型對(duì)象為objecta,并對(duì)此桌子3d模型objecta的現(xiàn)實(shí)世界中的長(zhǎng)度或者寬度或者高度的尺寸進(jìn)行設(shè)置;然后將設(shè)置前的桌子3d模型信息以及設(shè)置后的實(shí)際尺寸一并傳輸給3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器;

      步聚3.計(jì)算3d模型變更后的各節(jié)點(diǎn)坐標(biāo)。

      第一步:計(jì)算長(zhǎng)寬高的縮放比例值。3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器從3d模型實(shí)際尺寸設(shè)置器中獲取桌子3d模型objecta的設(shè)置前的3d模型的對(duì)象信息以及設(shè)置后的實(shí)際尺寸,并根據(jù)更新后的桌子3d模型現(xiàn)實(shí)世界中的長(zhǎng)寬高的尺寸與更新前的3d模型現(xiàn)世界中的長(zhǎng)寬高對(duì)應(yīng)的尺寸分別計(jì)算縮放比例值。假設(shè)長(zhǎng)度的縮放比例值為kl,假設(shè)寬度的縮放比例值為kw,假設(shè)高度的縮放比例值為kh;

      長(zhǎng)度的縮放比例值kl=更新后的3d模型現(xiàn)實(shí)世界中的長(zhǎng)度除以更新前的3d模型現(xiàn)實(shí)世界中的長(zhǎng)度;比例值kl取值為正實(shí)數(shù),如果更新后與更新前的長(zhǎng)度相同,則kl=1;假設(shè)更新后的3d模型現(xiàn)實(shí)世界中的長(zhǎng)度1.5米,更新前的3d模型現(xiàn)實(shí)世界中的長(zhǎng)度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對(duì)應(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)時(shí)在x軸、y軸、z軸上分別需要平移的向量坐標(biāo)為-xc、-yc以及-zc。假設(shè)桌子3d模型objecta的對(duì)象信息中的所有節(jié)點(diǎn)坐標(biāo)為node_group_old,從節(jié)點(diǎn)坐標(biāo)node_group_old中挨個(gè)取節(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è)此時(shí)平移后的桌子3d模型的坐標(biāo)為node_group_t1;

      第三步:將3d模型的obb包圍盒按長(zhǎng)高寬的標(biāo)尺線分別旋轉(zhuǎn)至與xyz軸平行。假設(shè)當(dāng)前的桌子3d模型objecta的obb包圍盒圍繞y軸逆時(shí)針偏移角度為α、圍繞z軸的逆時(shí)針偏移角度為β,圍繞x軸的逆時(shí)針偏移角度為γ,假設(shè)α=90,β=0,γ=0;從桌子3d模型平移后的節(jié)點(diǎn)坐標(biāo)node_group_t1中挨個(gè)取節(jié)點(diǎn)坐標(biāo)(xt1,yt1,zt1),并對(duì)此節(jié)點(diǎn)坐標(biāo)分別按y軸以順時(shí)針偏移角度α旋轉(zhuǎn)和按z軸以順時(shí)針偏移角度β旋轉(zhuǎn)以及按x軸以順時(shí)針偏移角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開(kāi),此處不再贅述),假設(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è)此時(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中挨個(gè)取節(jié)點(diǎn)坐標(biāo)(xr1,yr1,zr1),并對(duì)此節(jié)點(diǎn)坐標(biāo)按比例值進(jìn)行縮放,假設(shè)縮放后的節(jié)點(diǎn)坐標(biāo)為(xk1,yk1,zk1),因?yàn)樾D(zhuǎn)后的桌子3d模型的obb包圍盒的長(zhǎng)高寬的標(biāo)尺線分別與x、y、z軸平行,因此,在x軸上的xk1的值=xr1乘以長(zhǎng)度縮放比例值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è)此時(shí)桌子3d模型縮放后坐標(biāo)為node_group_k1;

      第五步:將3d模型以參考點(diǎn)為中心再旋轉(zhuǎn)到旋轉(zhuǎn)前的角度。從桌子3d模型縮放后的節(jié)點(diǎn)坐標(biāo)node_group_k1中挨個(gè)取節(jié)點(diǎn)坐標(biāo)(xk1,yk1,zk1),并對(duì)此節(jié)點(diǎn)坐標(biāo)分別圍繞y軸逆時(shí)針偏移角度α旋轉(zhuǎn)和圍繞z軸逆時(shí)針偏移角度β旋轉(zhuǎn)以及圍繞x軸以逆時(shí)針偏移角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開(kāi),此處不再贅述),假設(shè)此節(jié)點(diǎn)旋轉(zhuǎn)的坐標(biāo)為(xr2,yr2,zr2),xr2=0.5,yr2=5,zr2=0.75,,假設(shè)此時(shí)桌子3d模型旋轉(zhuǎn)后的坐標(biāo)為node_group_r2;

      第六步:將3d模型以參考點(diǎn)為中心再平移到平移前的位置;從節(jié)點(diǎn)坐標(biāo)node_group_r2中挨個(gè)取節(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è)此時(shí)桌子3d模型平移后的坐標(biāo)為node_group_t2,最后將所有節(jié)點(diǎn)平移到平移前的坐標(biāo)node_group_t2傳輸給3d模型記錄器,以更新對(duì)應(yīng)的桌子3d模型的對(duì)象信息;

      桌子3d模型在支撐面上的節(jié)點(diǎn)坐標(biāo)(xo,yo,zo)被縮放后的坐標(biāo)為(xt2,yt2,zt2),即(1,0,1.25),可以看出縮放的節(jié)點(diǎn)坐標(biāo)仍在支撐面上,即沒(méi)有產(chǎn)生嵌入或懸浮的問(wèn)題;

      步驟4.繪制3d模型。3d模型渲染器從3d模型記錄器中獲取桌子3d模型對(duì)象信息,并根據(jù)桌子3d模型的對(duì)象信息中更新后的節(jié)點(diǎn)坐標(biāo)node_group_t2繪制3d模型(3d模型繪制的具體技術(shù)方案在現(xiàn)有技術(shù)中已有公開(kāi),本發(fā)明不再贅述)。

      實(shí)施例2:

      對(duì)可動(dòng)態(tài)自定義3d模型尺寸的系統(tǒng),同實(shí)施例1。

      對(duì)安放在墻面上的空調(diào)3d模型的現(xiàn)實(shí)尺寸縮放,其步驟包括:

      步驟1.初始化3d模型的對(duì)象信息。3d模型記錄器記錄了對(duì)象信息包括:空調(diào)3d模型各節(jié)點(diǎn)的坐標(biāo),3d模型的obb包圍盒長(zhǎng)高寬,3d模型的obb包圍盒在xyz軸上的旋轉(zhuǎn)角度,3d模型的obb包圍盒中的平移參考點(diǎn)坐標(biāo),以及3d模型在現(xiàn)實(shí)世界中的實(shí)際長(zhǎng)高寬;

      步聚2.設(shè)置3d模型現(xiàn)實(shí)世界的尺寸。3d模型實(shí)際尺寸設(shè)置器從3d模型記錄器找到空調(diào)3d模型對(duì)象(尋找的方式可以但不限于:通過(guò)3d模型唯一標(biāo)識(shí)唯一定位到某一3d模型或者通過(guò)obb包圍盒的各節(jié)點(diǎn)的坐標(biāo)唯一定位到某一3d模型),假設(shè)此空調(diào)3d模型對(duì)象為objecta,并對(duì)空調(diào)3d模型objecta的現(xiàn)實(shí)世界中的長(zhǎng)度或者寬度或者高度的尺寸進(jìn)行設(shè)置;然后將設(shè)置前的空調(diào)3d模型信息以及設(shè)置后的實(shí)際尺寸一并傳輸給3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器;

      步聚3.計(jì)算3d模型變更后的各節(jié)點(diǎn)坐標(biāo)。

      第一步:計(jì)算長(zhǎng)寬高對(duì)縮放比例值。3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器從3d模型實(shí)際尺寸設(shè)置器中獲取空調(diào)3d模型objecta的設(shè)置前的3d模型信息以及設(shè)置后的實(shí)際尺寸,并根據(jù)更新后的3d模型現(xiàn)實(shí)世界中的長(zhǎng)寬高的尺寸與更新前的3d模型現(xiàn)世界中的長(zhǎng)寬高對(duì)應(yīng)的尺寸分別計(jì)算縮放比例值。假設(shè)長(zhǎng)度的縮放比例值為kl,假設(shè)寬度的縮放比例值為kw,假設(shè)高度的縮放比例值為kh;

      長(zhǎng)度的縮放比例值kl=更新后的3d模型現(xiàn)實(shí)世界中的長(zhǎng)度除以更新前的3d模型現(xiàn)實(shí)世界中的長(zhǎng)度;比例值kl取值為正實(shí)數(shù),如果更新后與更新前的長(zhǎng)度相同,則kl=1;假設(shè)更新后的3d模型現(xiàn)實(shí)世界中的長(zhǎng)度0.75米,更新前的3d模型現(xiàn)實(shí)世界中的長(zhǎng)度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對(duì)應(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)時(shí)在x軸y軸z軸上分別需要平移的向量坐標(biāo)為-xc、-yc以及-zc。假設(shè)3d模型objecta的對(duì)象信息中的所有節(jié)點(diǎn)坐標(biāo)為node_group_old,從節(jié)點(diǎn)坐標(biāo)node_group_old中挨個(gè)取節(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è)此時(shí)平移后的空調(diào)3d模型的坐標(biāo)為node_group_t1;

      第三步:將3d模型的obb包圍盒將長(zhǎng)高寬的標(biāo)尺線分別旋轉(zhuǎn)至與xyz軸平行。假設(shè)當(dāng)前的空調(diào)3d模型objecta的obb包圍盒圍繞y軸逆時(shí)針偏移角度為α、圍繞z軸的逆時(shí)針偏移角度為β,圍繞x軸的逆時(shí)針偏移角度為γ,假設(shè)α=90,β=0,γ=0;從空調(diào)3d模型平移后的節(jié)點(diǎn)坐標(biāo)node_group_t1中挨個(gè)取節(jié)點(diǎn)坐標(biāo)(xt1,yt1,zt1),并對(duì)此節(jié)點(diǎn)坐標(biāo)分別按y軸以順時(shí)針偏移角度α旋轉(zhuǎn)和按z軸以順時(shí)針偏移角度β旋轉(zhuǎn)以及按x軸以以順時(shí)針偏移角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開(kāi),此處不再贅述),假設(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è)此時(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中挨個(gè)取節(jié)點(diǎn)坐標(biāo)(xr1,yr1,zr1),并對(duì)此節(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包圍盒的長(zhǎng)高寬的標(biāo)尺線分別與xyz軸平行,因此,在x軸上的xk1的值=xr1乘以長(zhǎng)度縮放比例值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è)此時(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中挨個(gè)取節(jié)點(diǎn)坐標(biāo)(xk1,yk1,zk1),并對(duì)此節(jié)點(diǎn)坐標(biāo)分別圍繞y軸逆時(shí)針偏移角度α旋轉(zhuǎn)和圍繞z軸逆時(shí)針偏移角度β旋轉(zhuǎn)以及圍繞x軸以逆時(shí)針偏移角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開(kāi),此處不再贅述),假設(shè)此節(jié)點(diǎn)旋轉(zhuǎn)的坐標(biāo)為(xr2,yr2,zr2),xr2=0,yr2=4,zr2=0.25,假設(shè)此時(shí)空調(diào)3d模型旋轉(zhuǎn)后的坐標(biāo)為node_group_r2;

      第六步:將空調(diào)3d模型以參考點(diǎn)為中心再平移到平移前的位置;從節(jié)點(diǎn)坐標(biāo)node_group_r2中挨個(gè)取節(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è)此時(shí)空調(diào)3d模型平移后的坐標(biāo)為node_group_t2,最后將所有節(jié)點(diǎn)平移到平移前的坐標(biāo)node_group_t2傳輸給3d模型記錄器,以更新對(duì)應(yīng)的空調(diào)3d模型的對(duì)象信息;

      空調(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)仍在支撐面上,即沒(méi)有產(chǎn)生嵌入或懸浮的問(wèn)題;

      步驟4.繪制3d模型。3d模型渲染器從3d模型記錄器中獲取空調(diào)3d模型對(duì)象信息,并根據(jù)空調(diào)3d模型對(duì)象信息中更新后的節(jié)點(diǎn)坐標(biāo)node_group_t2繪制3d模型(3d模型繪制的具體技術(shù)方案在現(xiàn)有技術(shù)中已有公開(kāi),本發(fā)明不再贅述)。

      實(shí)施例3:

      對(duì)可動(dòng)態(tài)自定義3d模型尺寸的系統(tǒng),同實(shí)施例1,對(duì)安放在房頂上的吸頂燈3d模型的現(xiàn)實(shí)尺寸縮放,其步驟包括:

      步驟1.初始化3d模型的對(duì)象信息。3d模型記錄器記錄了對(duì)象信息包括:3d模型各節(jié)點(diǎn)的坐標(biāo),3d模型的obb包圍盒長(zhǎng)高寬,3d模型的obb包圍盒在xyz軸上的旋轉(zhuǎn)角度,3d模型的obb包圍盒中的平移參考點(diǎn)坐標(biāo),以及3d模型在現(xiàn)實(shí)世界中的實(shí)際長(zhǎng)高寬;

      步聚2.設(shè)置3d模型現(xiàn)實(shí)世界的尺寸。3d模型實(shí)際尺寸設(shè)置器從3d模型記錄器找到吸頂燈3d模型對(duì)象(尋找的方式可以但不限于:通過(guò)3d模型唯一標(biāo)識(shí)唯一定位到某一3d模型或者通過(guò)obb包圍盒的各節(jié)點(diǎn)的坐標(biāo)唯一定位到某一3d模型),假設(shè)此吸頂燈3d模型對(duì)象為objecta,并對(duì)此吸頂燈3d模型objecta的現(xiàn)實(shí)世界中的長(zhǎng)度或者寬度或者高度的尺寸進(jìn)行設(shè)置;然后將設(shè)置前的吸頂燈3d模型信息以及設(shè)置后的實(shí)際尺寸一并傳輸給3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器;

      步聚3.計(jì)算3d模型變更后的各節(jié)點(diǎn)坐標(biāo)。

      第一步:計(jì)算長(zhǎng)寬高對(duì)縮放比例值。3d模型節(jié)點(diǎn)坐標(biāo)計(jì)算器從3d模型實(shí)際尺寸設(shè)置器中獲取桌子3d模型objecta的設(shè)置前的3d模型信息以及設(shè)置后的實(shí)際尺寸,并根據(jù)更新后的桌子3d模型現(xiàn)實(shí)世界中的長(zhǎng)寬高的尺寸與更新前的3d模型現(xiàn)世界中的長(zhǎng)寬高對(duì)應(yīng)的尺寸分別計(jì)算縮放比例值。假設(shè)長(zhǎng)度的縮放比例值為kl,假設(shè)寬度的縮放比例值為kw,假設(shè)高度的縮放比例值為kh;

      長(zhǎng)度的縮放比例值kl=更新后的3d模型現(xiàn)實(shí)世界中的長(zhǎng)度除以更新前的3d模型現(xiàn)實(shí)世界中的長(zhǎng)度;比例值kl取值為正實(shí)數(shù),如果更新后與更新前的長(zhǎng)度相同,則kl=1;假設(shè)更新后的3d模型現(xiàn)實(shí)世界中的長(zhǎng)度1.5米,更新前的3d模型現(xiàn)實(shí)世界中的長(zhǎng)度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對(duì)應(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)時(shí)在x軸y軸z軸上分別需要平移的向量坐標(biāo)為-xc、-yc以及-zc。假設(shè)桌子3d模型objecta的對(duì)象信息中的所有節(jié)點(diǎn)坐標(biāo)為node_group_old,從節(jié)點(diǎn)坐標(biāo)node_group_old中挨個(gè)取節(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è)此時(shí)平移后的吸頂燈3d模型的坐標(biāo)為node_group_t1;

      第三步:將3d模型的obb包圍盒將長(zhǎng)高寬的標(biāo)尺線分別旋轉(zhuǎn)至與xyz軸平行。假設(shè)當(dāng)前的吸頂燈3d模型objecta的obb包圍盒圍繞y軸逆時(shí)針偏移角度為α、圍繞z軸的逆時(shí)針偏移角度為β,圍繞x軸的逆時(shí)針偏移角度為γ,假設(shè)α=90,β=0,γ=0;從桌子3d模型平移后的節(jié)點(diǎn)坐標(biāo)node_group_t1中挨個(gè)取節(jié)點(diǎn)坐標(biāo)(xt1,yt1,zt1),并對(duì)此節(jié)點(diǎn)坐標(biāo)分別按y軸以順時(shí)針偏移角度α旋轉(zhuǎn)和按z軸以順時(shí)針偏移角度β旋轉(zhuǎn)以及按x軸以順時(shí)針偏移角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開(kāi),此處不再贅述),假設(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è)此時(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中挨個(gè)取節(jié)點(diǎn)坐標(biāo)(xr1,yr1,zr1),并對(duì)此節(jié)點(diǎn)坐標(biāo)按比例值進(jìn)行縮放,假設(shè)縮放后的節(jié)點(diǎn)坐標(biāo)為(xk1,yk1,zk1),因?yàn)樾D(zhuǎn)后的桌子3d模型的obb包圍盒的長(zhǎng)高寬的標(biāo)尺線分別與xyz軸平行,因此,在x軸上的xk1的值=xr1乘以長(zhǎng)度縮放比例值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è)此時(shí)吸頂燈3d模型縮放后坐標(biāo)為node_group_k1;

      第五步:將3d模型以參考點(diǎn)為中心再旋轉(zhuǎn)到旋轉(zhuǎn)前的角度。從吸頂燈3d模型縮放后的節(jié)點(diǎn)坐標(biāo)node_group_k1中挨個(gè)取節(jié)點(diǎn)坐標(biāo)(xk1,yk1,zk1),并對(duì)此節(jié)點(diǎn)坐標(biāo)分別圍繞y軸逆時(shí)針旋轉(zhuǎn)角度α旋轉(zhuǎn)和圍繞z軸逆時(shí)針旋轉(zhuǎn)角度β旋轉(zhuǎn)以及圍繞x軸以逆時(shí)針旋轉(zhuǎn)角度γ旋轉(zhuǎn)(節(jié)點(diǎn)坐標(biāo)以坐標(biāo)原點(diǎn)進(jìn)行旋轉(zhuǎn)的算法在現(xiàn)有技術(shù)中已公開(kāi),此處不再贅述),假設(shè)此節(jié)點(diǎn)旋轉(zhuǎn)的坐標(biāo)為(xr2,yr2,zr2),xr2=0.5,yr2=5,zr2=0.75,,假設(shè)此時(shí)吸頂燈3d模型旋轉(zhuǎn)后的坐標(biāo)為node_group_r2;

      第六步:將3d模型以參考點(diǎn)為中心再平移到平移前的位置;從節(jié)點(diǎn)坐標(biāo)node_group_r2中挨個(gè)取節(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è)此時(shí)吸頂燈3d模型平移后的坐標(biāo)為node_group_t2,最后將所有節(jié)點(diǎn)平移到平移前的坐標(biāo)node_group_t2傳輸給3d模型記錄器,以更新對(duì)應(yīng)的吸頂燈3d模型的對(duì)象信息;

      吸頂燈3d模型在支撐面上的節(jié)點(diǎn)坐標(biāo)(xo,yo,zo)被縮放后的坐標(biāo)為(xt2,yt2,zt2),即(1,10,1.25),可以看出縮放的節(jié)點(diǎn)坐標(biāo)仍在支撐面上,即沒(méi)有產(chǎn)生嵌入或懸浮的問(wèn)題;

      步驟4.繪制3d模型。3d模型渲染器從3d模型記錄器中獲取吸頂燈3d模型對(duì)象信息,并根據(jù)吸頂燈3d模型對(duì)象信息中更新后的節(jié)點(diǎn)坐標(biāo)node_group_t2繪制3d模型(3d模型繪制的具體技術(shù)方案在現(xiàn)有技術(shù)中已有公開(kāi),本發(fā)明不再贅述)。

      當(dāng)前第1頁(yè)1 2 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1