本發(fā)明屬于自然人機(jī)交互領(lǐng)域,特別涉及一種基于自然手勢的虛擬數(shù)字雕塑方法。
背景技術(shù):
隨著先進(jìn)的數(shù)字化儀器及設(shè)備不斷投入實(shí)際應(yīng)用,計(jì)算機(jī)輔助下的三維建模技術(shù)已經(jīng)發(fā)展到包括三維掃描儀、基于圖像的建模與繪制(IBMR)等多種方法在內(nèi)的三維建模,而且計(jì)算機(jī)輔助設(shè)計(jì)系統(tǒng)功能越來越強(qiáng)大,但是其使用門檻也越來越高,操作也來越復(fù)雜,用戶需要費(fèi)盡周折才能將自己的三維思路準(zhǔn)確地傳達(dá)給計(jì)算機(jī),很大程度限制了設(shè)計(jì)者的設(shè)計(jì)想法。傳統(tǒng)的三維建模主要是通過三維建模軟件如3DMax、Maya和犀牛等來完成,他們的強(qiáng)大不可置否,初學(xué)者必須要花費(fèi)一定的精力才能掌握如何建模,門檻較高,而且操作者也不容易將自己的想法給清晰的表達(dá)出來,而且上手后完成一個(gè)較為美觀的模型的時(shí)間也常常需要幾個(gè)小時(shí),國外也有一些通過VR 和AR來進(jìn)行三維建模,但是所建出來的模型往往過于簡單,實(shí)用性不高。3D打印機(jī)在日常生活運(yùn)用十分普遍,然而卻很難推廣開來,其中最關(guān)鍵的原因有兩點(diǎn):一是三維建模軟件的入門比較困難,非相關(guān)專業(yè)的人需要花費(fèi)很大精力去學(xué)習(xí)如何使用建模軟件;二是三維建模軟件難以表達(dá)清楚人們心中所想物體的形狀,特別是一些細(xì)節(jié)方面,往往人們心中所想的和軟件所畫出來的相差很大。所以進(jìn)一步優(yōu)化和強(qiáng)大虛擬雕塑的變形等功能正是人們理想的實(shí)現(xiàn)方式。
在人體的各個(gè)器官中,手是最靈活的,人們可以根據(jù)心中的想法比劃出各種各樣的手勢。就好比一個(gè)雕刻家手中拿著刻刀可以輕易的刻出物體的外形,但根據(jù)國內(nèi)外形勢,國內(nèi)的3D建模軟件功能強(qiáng)大卻需要耗費(fèi)人們大量的時(shí)間學(xué)習(xí)和熟練軟件;而國外的各種輕量化設(shè)計(jì)性研究已得到迅速實(shí)現(xiàn)但是所能建立的模型較為簡單。針對以上情況,注重進(jìn)一步優(yōu)化和強(qiáng)大虛擬雕塑功能,實(shí)現(xiàn)自然的人機(jī)交互模式同時(shí)精細(xì)雕塑效果。建立一種比智能空間更為自然、有效的、具有高度流動性的手勢虛擬雕塑?;谝陨蟽蓚€(gè)現(xiàn)象,我們試想著將其優(yōu)勢互補(bǔ)。通過自然的手勢利用Leap motion 在計(jì)算機(jī)上進(jìn)行虛擬雕塑,并進(jìn)行快速三維建模,然后結(jié)合3D打印機(jī)把模型打印出來。這樣就解決了目前三維建模困難的問題,使得3D打印機(jī)可以面向大眾,且門檻低、易推廣。
技術(shù)實(shí)現(xiàn)要素:
此發(fā)明提出了允許使用者通過自然的手勢在電腦中進(jìn)行虛擬雕塑的方法,此方法使用了基于leap Motion非接觸式設(shè)備的自然人機(jī)交互接口,可以令使用者直觀地進(jìn)行虛擬雕塑及實(shí)時(shí)觀察到雕塑的結(jié)果反饋。
本發(fā)明的目的通過如下技術(shù)方案實(shí)現(xiàn)。
基于自然手勢的虛擬數(shù)字雕塑方法,包括如下步驟:
S1、手勢位置獲取,手勢位置通過Leap Motion 來獲取得到;
S2、虛擬雕塑建模;
S3、模型變形,在進(jìn)行虛擬雕塑的任務(wù)工作時(shí)有兩個(gè)主要模型,一個(gè)是已構(gòu)建好等待雕塑的模型,一個(gè)是由Leap Motion獲取關(guān)節(jié)坐標(biāo)構(gòu)建的虛擬手模型;當(dāng)人手在Leap Motion下運(yùn)動進(jìn)而控制虛擬手與固定的等待雕塑模型發(fā)生輕微碰撞,碰撞處檢測以三維空間三角形與三角形相交的算法判斷有無交點(diǎn),與交點(diǎn)交線位置,再根據(jù)碰撞深度的計(jì)算,利用虛擬雕塑變形算法進(jìn)而將相交點(diǎn)位置坐標(biāo)進(jìn)行實(shí)時(shí)修改,從而實(shí)現(xiàn)雕塑變形效果。
進(jìn)一步地,所述步驟S1包括以下步驟:
手勢位置的數(shù)據(jù)是通過Leap Motion 來獲取得到,虛擬雕塑需要用到的是手指來進(jìn)行雕塑的,因此,我們需要獲取手指的相關(guān)數(shù)據(jù),每只手可以獲得5個(gè)手指的數(shù)據(jù),5個(gè)手指分別為:
(1)拇指(Thumb finger)
(2)食指(Index finger)
(3)中指(Middle finger)
(4)無名指(Ring finger)
(5)小拇指(Pinky finger)
每個(gè)手指可以獲取其初始位置start(X,Y,Z),終止位置end(X,Y,Z)和方向direction(pitch, roll, yaw)。
對每個(gè)手指進(jìn)行細(xì)分,可以分為如下四個(gè)關(guān)節(jié):
(1)掌骨Metacarpal bone
(2)近端骨Proximal bone
(3)中間骨Middle bone
(4)遠(yuǎn)端骨Distal bone
對每一個(gè)關(guān)節(jié),也可以獲取其初始位置start(X,Y,Z),終止位置end(X,Y,Z)和方向direction(pitch, roll, yaw)。
有了以上的數(shù)據(jù),我們可以得到手的位置,由于Leap Motion 獲取手勢數(shù)據(jù)也存在著一定的誤差,抗干擾性不是很強(qiáng),所以我們會利用混合卡爾曼濾波來對手勢數(shù)據(jù)進(jìn)行融合,這樣手勢數(shù)據(jù)的精確性就提高了很多,可以用于接下來的手勢模型搭建。
進(jìn)一步地,所述步驟S2包括以下步驟:
(1)利用3DMAX構(gòu)建出表示人手關(guān)節(jié)的圓柱體,轉(zhuǎn)換為OpenSceneGraph中后綴為.osg的節(jié)點(diǎn)模型以便用于場景的處理。隨后利用Leap Motion來獲取人手的各個(gè)關(guān)節(jié)的相應(yīng)坐標(biāo),在Leap Motion的API中,人手的關(guān)節(jié)識別中將手指分成了17部分,分別是尾指的掌骨(Metacarpals)、近側(cè)指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、無名指的掌骨(Metacarpals)、近側(cè)指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、中指的掌骨(Metacarpals)、近側(cè)指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、食指的掌骨(Metacarpals)、近側(cè)指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、拇指的近側(cè)指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)(拇指的掌骨長度置為0),所以在OpenSceneGraph中需要用17個(gè)圓柱體來構(gòu)建人手的模型
(2)由于Leap Motion中的坐標(biāo)系與OpenSceneGraph中的坐標(biāo)系不同,在由leap motion在傳入坐標(biāo)時(shí)需要進(jìn)行轉(zhuǎn)換。Leap Motion采用的坐標(biāo)系時(shí)以相對設(shè)備水平的方向?yàn)閄軸,右邊為正軸,相對設(shè)備垂直的方向?yàn)閅軸,向上為正軸,在水平面與X軸垂直的方向?yàn)閆軸,以指向使用者的方向?yàn)檎S,而在OpenSceneGraph以視窗水平的方向?yàn)閄軸,右邊為正軸,視窗設(shè)備垂直的方向?yàn)閆軸,向上為正軸,在水平面與X軸垂直的方向?yàn)閅軸,以指向使用者的方向?yàn)檎S,因此在OpenSceneGraph中采用傳入的坐標(biāo)數(shù)據(jù)時(shí)需要將傳入的Y軸和Z軸的數(shù)據(jù)相互交換。在OpenSceneGraph中創(chuàng)建一個(gè)Group指針作為根節(jié)點(diǎn),使用內(nèi)帶的矩陣轉(zhuǎn)換函數(shù)與傳入的坐標(biāo)結(jié)合處理各個(gè)圓柱體,再分別將17個(gè)圓柱體作為node加入到根節(jié)點(diǎn)中,使用osg::Viewer將其顯示在場景中。
(3)在構(gòu)建完虛擬手后,還需要對虛擬雕塑用泥進(jìn)行構(gòu)建,由于現(xiàn)實(shí)生活中雕塑用泥一般不定形,因此在使用中提供虛擬泥的預(yù)設(shè)模型,即利用3dmax構(gòu)建出長方體,正方體,圓柱,球體作為預(yù)設(shè)。
進(jìn)一步地,所述步驟S3包括以下步驟:
在進(jìn)行虛擬雕塑的任務(wù)工作時(shí)有兩個(gè)主要模型,一個(gè)是以構(gòu)建好等待雕塑的模型,一個(gè)是由Leap Motion獲取關(guān)節(jié)坐標(biāo)構(gòu)建的虛擬手模型。當(dāng)人手在Leap Motion下運(yùn)動進(jìn)而控制虛擬手與固定的等待雕塑模型發(fā)生輕微碰撞,碰撞出檢測以三維空間三角形與三角形相交的算法判斷有無交點(diǎn),與交點(diǎn)交線位置,再根據(jù)碰撞深度的計(jì)算,利用虛擬雕塑變形算法進(jìn)而將相交點(diǎn)位置坐標(biāo)進(jìn)行一定實(shí)時(shí)修改,從而實(shí)現(xiàn)雕塑變形效果。過程中涉及的主要碰撞檢測算法與虛擬雕塑變形算法如下詳述。
三維空間兩個(gè)三角形碰撞檢測算法如下:
(1)假定三維空間有ABC與PQR,以ABC所在平面為基準(zhǔn),建立該平面法線,其中,由三角形ABC所在平面(定為*0)劃分的空間中,為正向的空間為*1,為負(fù)向的空間為*2,詳見附圖1。
(2)根據(jù)三角形PQR的點(diǎn)P,點(diǎn)Q,點(diǎn)R各自所在空間領(lǐng)域(*1/*2/*0)的判斷,分析碰撞情況。利用分別與,,的向量內(nèi)積的正負(fù)值判斷所在空間領(lǐng)域(*1/*2/*0)。
a)如果點(diǎn)P,點(diǎn)Q,點(diǎn)R三點(diǎn)均在*1或*2,則ABC與PQR不可能相交;
b)如果點(diǎn)P,點(diǎn)Q,點(diǎn)R中存在點(diǎn)在*0,則ABC與*0肯定相交,ABC與PQR可能相交:
b1)該交點(diǎn)在ABC,則碰撞點(diǎn)即為該交點(diǎn);
b2)否則,繼續(xù)c)步判斷。
c)如果點(diǎn)P,點(diǎn)Q,點(diǎn)R三點(diǎn)不全在*0或*1或*2,則ABC與*0肯定相交,根據(jù)交線與面*0的相似三角形構(gòu)建,向量投影求出ABC與*0的交點(diǎn)(詳見附圖2):
c1)該交點(diǎn)在ABC,則碰撞點(diǎn)即為該交點(diǎn);
c2)否則,無碰撞點(diǎn)。
(3)判斷點(diǎn)是否在已知三角形算法分析如下。建立附圖3,XYZ,點(diǎn)A在XYZ上,點(diǎn)B在外。
對于在XYZ的點(diǎn)有如下特征:
選取XY邊,A,Z兩點(diǎn)在同一側(cè);選取XZ邊,A,Y兩點(diǎn)在同一側(cè);選取YZ邊,A,X兩點(diǎn)在同一側(cè)。
其中,附圖3,涉及點(diǎn)是否在已知平面交點(diǎn)獲取方法:
,,
例如PQ與*0交點(diǎn)F計(jì)算如下:
其中:
<二>雕塑變形算法的過程如附圖4所示,當(dāng)手指不斷的向雕塑靠近時(shí),根據(jù)碰撞算法可以檢測出手指面和雕塑面是否產(chǎn)生碰撞,如果產(chǎn)生碰撞了,則可以計(jì)算出所有的碰撞點(diǎn)。對于每一個(gè)碰撞點(diǎn),在產(chǎn)生碰撞之后,都必須要朝某一個(gè)方向偏移一定的距離,從而使得雕塑面產(chǎn)生一定的形變。
假設(shè)為其中一個(gè)碰撞點(diǎn),為碰撞面上距離最近的一個(gè)點(diǎn),則點(diǎn)的碰撞距離可以被定義如下:
(1)
點(diǎn)的運(yùn)動方向可以被定義如下:
(2)
有了碰撞距離和運(yùn)動方向,就可以將點(diǎn)進(jìn)行相應(yīng)的偏移。將所計(jì)算出的每一個(gè)碰撞點(diǎn)都按照這種方式進(jìn)行偏移,則雕塑就可以實(shí)現(xiàn)變形的功能。
本發(fā)明相對于現(xiàn)有技術(shù)具有如下的優(yōu)點(diǎn)及效果:
這個(gè)發(fā)明提出了一種允許操作者通過三維的手勢動作來在計(jì)算機(jī)OSG平臺上完成虛擬雕塑任務(wù)。這種基于Leap Motion的接口獲取更加準(zhǔn)確的關(guān)節(jié)坐標(biāo)實(shí)現(xiàn)自然的人機(jī)交互,運(yùn)用到三維建模雕塑上,擺脫過多的物理裝置的限制。
附圖說明
圖1是碰撞檢測兩三角形的空間圖;
圖2是空間上交線與面求交點(diǎn)示意圖;
圖3是點(diǎn)是否在三角形示意圖;
圖4是手指面和雕塑面產(chǎn)生碰撞圖。
具體實(shí)施方式
下面結(jié)合實(shí)施例對本發(fā)明作進(jìn)一步詳細(xì)的描述,但本發(fā)明的實(shí)施方式不限于此,以下若有未特別詳細(xì)說明之處,均是本領(lǐng)域技術(shù)人員可參照現(xiàn)有技術(shù)實(shí)現(xiàn)的。
本實(shí)例基于自然手勢的虛擬數(shù)字雕塑實(shí)現(xiàn)方法包括如下步驟:
S1、手勢位置獲取
S2、虛擬雕塑建模
S3、模型變形。
所述步驟S1包括以下步驟:
手勢位置的數(shù)據(jù)是通過Leap Motion 來獲取得到,虛擬雕塑需要用到的是手指來進(jìn)行雕塑的,因此,我們需要獲取手指的相關(guān)數(shù)據(jù),每只手可以獲得5個(gè)手指的數(shù)據(jù),5個(gè)手指分別為:
(1)Thumb finger
(2)Index finger
(3)Middle finger
(4)Ring finger
(5)Pinky finger;
每個(gè)手指可以獲取其初始位置start(X,Y,Z),終止位置end(X,Y,Z)和方向direction(pitch, roll, yaw)。
對每個(gè)手指進(jìn)行細(xì)分,可以分為如下四個(gè)關(guān)節(jié):
(1)Metacarpal bone
(2)Proximal bone
(3)Middle bone
(4)Distal bone;
對每一個(gè)關(guān)節(jié),也可以獲取其初始位置start(X,Y,Z),終止位置end(X,Y,Z)和方向direction(pitch, roll, yaw)。
有了以上的數(shù)據(jù),我們可以得到手的位置,由于Leap Motion 獲取手勢數(shù)據(jù)也存在著一定的誤差,抗干擾性不是很強(qiáng),所以我們會利用混合卡爾曼濾波來對手勢數(shù)據(jù)進(jìn)行融合,這樣手勢數(shù)據(jù)的精確性就提高了很多,可以用于接下來的手勢模型搭建。
所述步驟S2包括以下步驟:
(1)利用3DMAX構(gòu)建出表示人手關(guān)節(jié)的圓柱體,轉(zhuǎn)換為OpenSceneGraph中后綴為.osg的節(jié)點(diǎn)模型以便用于場景的處理。隨后利用Leap Motion來獲取人手的各個(gè)關(guān)節(jié)的相應(yīng)坐標(biāo),在Leap Motion的API中,人手的關(guān)節(jié)識別中將手指分成了17部分,分別是尾指的掌骨(Metacarpals)、近側(cè)指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、無名指的掌骨(Metacarpals)、近側(cè)指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、中指的掌骨(Metacarpals)、近側(cè)指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、食指的掌骨(Metacarpals)、近側(cè)指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)、拇指的近側(cè)指骨(Proximal phalanges)、中段指骨(Intermediate phalanges) 和末梢指骨(Distal phalanges)(拇指的掌骨長度置為0),所以在OpenSceneGraph中需要用17個(gè)圓柱體來構(gòu)建人手的模型
(2)由于Leap Motion中的坐標(biāo)系與OpenSceneGraph中的坐標(biāo)系不同,在由leap motion在傳入坐標(biāo)時(shí)需要進(jìn)行轉(zhuǎn)換。Leap Motion采用的坐標(biāo)系時(shí)以相對設(shè)備水平的方向?yàn)閄軸,右邊為正軸,相對設(shè)備垂直的方向?yàn)閅軸,向上為正軸,在水平面與X軸垂直的方向?yàn)閆軸,以指向使用者的方向?yàn)檎S,而在OpenSceneGraph以視窗水平的方向?yàn)閄軸,右邊為正軸,視窗設(shè)備垂直的方向?yàn)閆軸,向上為正軸,在水平面與X軸垂直的方向?yàn)閅軸,以指向使用者的方向?yàn)檎S,因此在OpenSceneGraph中采用傳入的坐標(biāo)數(shù)據(jù)時(shí)需要將傳入的Y軸和Z軸的數(shù)據(jù)相互交換。在OpenSceneGraph中創(chuàng)建一個(gè)Group指針作為根節(jié)點(diǎn),使用內(nèi)帶的矩陣轉(zhuǎn)換函數(shù)與傳入的坐標(biāo)結(jié)合處理各個(gè)圓柱體,再分別將17個(gè)圓柱體作為node加入到根節(jié)點(diǎn)中,使用osg::Viewer將其顯示在場景中。
(3)在構(gòu)建完虛擬手后,還需要對虛擬雕塑用泥進(jìn)行構(gòu)建,由于現(xiàn)實(shí)生活中雕塑用泥一般不定形,因此在使用中提供虛擬泥的預(yù)設(shè)模型,即利用3dmax構(gòu)建出長方體,正方體,圓柱,球體作為預(yù)設(shè)。
所述步驟S3包括以下步驟:
在進(jìn)行虛擬雕塑的任務(wù)工作時(shí)有兩個(gè)主要模型,一個(gè)是以構(gòu)建好等待雕塑的模型,一個(gè)是由Leap Motion獲取關(guān)節(jié)坐標(biāo)構(gòu)建的虛擬手模型。當(dāng)人手在Leap Motion下運(yùn)動進(jìn)而控制虛擬手與固定的等待雕塑模型發(fā)生輕微碰撞,碰撞出檢測以三維空間三角形與三角形相交的算法判斷有無交點(diǎn),與交點(diǎn)交線位置,再根據(jù)碰撞深度的計(jì)算,利用虛擬雕塑變形算法進(jìn)而將相交點(diǎn)位置坐標(biāo)進(jìn)行一定實(shí)時(shí)修改,從而實(shí)現(xiàn)雕塑變形效果。過程中涉及的主要碰撞檢測算法與虛擬雕塑變形算法如下詳述。
<一>過程中主要三維空間兩個(gè)三角形碰撞檢測算法如下:
(1)假定三維空間有ABC與PQR,以ABC所在平面為基準(zhǔn),建立該平面法線,其中,由三角形ABC所在平面(定為*0)劃分的空間中,為正向的空間為*1,為負(fù)向的空間為*2,詳見附圖1。
(2)根據(jù)三角形PQR的點(diǎn)P,點(diǎn)Q,點(diǎn)R各自所在空間領(lǐng)域(*1/*2/*0)的判斷,分析碰撞情況。利用分別與,,的向量內(nèi)積的正負(fù)值判斷所在空間領(lǐng)域(*1/*2/*0)。
c)如果點(diǎn)P,點(diǎn)Q,點(diǎn)R三點(diǎn)均在*1或*2,則ABC與PQR不可能相交;
d)如果點(diǎn)P,點(diǎn)Q,點(diǎn)R中存在點(diǎn)在*0,則ABC與*0肯定相交,ABC與PQR可能相交:
b1)該交點(diǎn)在ABC,則碰撞點(diǎn)即為該交點(diǎn);
b2)否則,繼續(xù)c)步判斷。
c)如果點(diǎn)P,點(diǎn)Q,點(diǎn)R三點(diǎn)不全在*0或*1或*2,則ABC與*0肯定相交,根據(jù)交線與面*0的相似三角形構(gòu)建,向量投影求出ABC與*0的交點(diǎn)(詳見附圖2):
c1)該交點(diǎn)在ABC,則碰撞點(diǎn)即為該交點(diǎn);
c2)否則,無碰撞點(diǎn)。
(3)判斷點(diǎn)是否在已知三角形算法分析如下。建立附圖3,XYZ,點(diǎn)A在XYZ上,點(diǎn)B在外。
對于在XYZ的點(diǎn)有如下特征:
選取XY邊,A,Z兩點(diǎn)在同一側(cè);選取XZ邊,A,Y兩點(diǎn)在同一側(cè);選取YZ邊,A,X兩點(diǎn)在同一側(cè)。
其中,附圖3,涉及點(diǎn)是否在已知平面交點(diǎn)獲取方法:
,,
例如PQ與*0交點(diǎn)F:
<二>雕塑變形算法的過程如附圖4所示,當(dāng)手指不斷的向雕塑靠近時(shí),根據(jù)碰撞算法可以檢測出手指面和雕塑面是否產(chǎn)生碰撞,如果產(chǎn)生碰撞了,則可以計(jì)算出所有的碰撞點(diǎn)。對于每一個(gè)碰撞點(diǎn),在產(chǎn)生碰撞之后,都必須要朝某一個(gè)方向偏移一定的距離,從而使得雕塑面產(chǎn)生一定的形變。
假設(shè)為其中一個(gè)碰撞點(diǎn),為碰撞面上距離最近的一個(gè)點(diǎn),則點(diǎn)的碰撞距離可以被定義如下:
(1)
點(diǎn)的運(yùn)動方向可以被定義如下:
(2)
有了碰撞距離和運(yùn)動方向,就可以將點(diǎn)進(jìn)行相應(yīng)的偏移。將所計(jì)算出的每一個(gè)碰撞點(diǎn)都按照這種方式進(jìn)行偏移,則雕塑就可以實(shí)現(xiàn)變形的功能。
上述實(shí)施例為本發(fā)明較佳的實(shí)施方式,但本發(fā)明的實(shí)施方式并不受上述實(shí)施例的限制,其他的任何未背離本發(fā)明的精神實(shí)質(zhì)與原理下所作的改變、修飾、替代、組合、簡化,均應(yīng)為等效的置換方式,都包含在本發(fā)明的保護(hù)范圍之內(nèi)。