一種基于手勢(shì)交互的沙畫(huà)系統(tǒng)的制作方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及一種沙畫(huà)實(shí)現(xiàn)系統(tǒng),尤其是一種操作簡(jiǎn)單、效果逼真、互動(dòng)和體驗(yàn)效果好的基于手勢(shì)交互的沙畫(huà)系統(tǒng)。【
背景技術(shù):
】[0002]手勢(shì)交互作為實(shí)現(xiàn)體感交互的方法之一,是人通過(guò)手和前臂有意義的運(yùn)動(dòng)表達(dá)信息的一種方式,用戶可以簡(jiǎn)單地定義一種適當(dāng)?shù)氖謩?shì)來(lái)對(duì)周?chē)臋C(jī)器進(jìn)行控制,或記錄文字,或情感表達(dá)。手勢(shì)交互技術(shù)在現(xiàn)實(shí)社會(huì)中有廣泛的應(yīng)用:針對(duì)聽(tīng)力缺陷人群的幫助系統(tǒng);嬰幼兒和計(jì)算機(jī)交互系統(tǒng);手語(yǔ)識(shí)別系統(tǒng);軍事導(dǎo)航系統(tǒng);遠(yuǎn)程醫(yī)療系統(tǒng)等。研宄手勢(shì)交互,可以為人類(lèi)提供更為細(xì)致貼切的服務(wù)。[0003]基于手勢(shì)交互的沙畫(huà)系統(tǒng),通過(guò)手勢(shì)交互,進(jìn)行沙畫(huà)創(chuàng)作。讓人們無(wú)需使用真實(shí)的沙畫(huà)作畫(huà)工具,打開(kāi)電腦,就能創(chuàng)作沙畫(huà)。將現(xiàn)代科技融入中國(guó)的傳統(tǒng)藝術(shù)形式,繼承并傳遞傳統(tǒng)藝術(shù)形式的內(nèi)涵,使更多的人了解沙畫(huà)。[0004]現(xiàn)有的一些相關(guān)技術(shù)提供了利用鼠標(biāo)或觸屏的方式實(shí)現(xiàn)了簡(jiǎn)單的沙畫(huà)作畫(huà)功能,但是他們都是基于使用鼠標(biāo)或手指點(diǎn)擊來(lái)實(shí)現(xiàn)的,整個(gè)操作過(guò)程都依賴(lài)于不斷的點(diǎn)擊,有過(guò)多的間斷性和機(jī)械性。比如在PC上運(yùn)行的沙畫(huà)軟件,基本就是利用鼠標(biāo)來(lái)作畫(huà),當(dāng)想換一種作畫(huà)方式的時(shí)候,需要停下當(dāng)前的作畫(huà)任務(wù),去點(diǎn)擊菜單,然后選擇想要使用的方式,最后點(diǎn)擊應(yīng)用設(shè)置,再返回到作畫(huà)的任務(wù)中繼續(xù)之前的作畫(huà)過(guò)程。當(dāng)需要產(chǎn)生更寬的沙畫(huà)軌跡的時(shí)候、當(dāng)你需要改變沙子的顏色的時(shí)候、當(dāng)你需要產(chǎn)生更濃密的沙子的時(shí)候,需要不斷重復(fù)之前的過(guò)程。[0005]現(xiàn)有的利用鼠標(biāo)或觸屏的沙畫(huà)作畫(huà)方式,具有過(guò)多的間斷性、機(jī)械式的操作過(guò)程,嚴(yán)重影響了作畫(huà)的心情和創(chuàng)作的思路,降低了人機(jī)交互的體驗(yàn)效果?!?br/>發(fā)明內(nèi)容】[0006]為解決上述問(wèn)題,本發(fā)明提供了一種操作簡(jiǎn)單、效果逼真、互動(dòng)和體驗(yàn)效果好基于手勢(shì)交互的沙畫(huà)系統(tǒng),包括依次設(shè)置的會(huì)話層模塊,表示層模塊,應(yīng)用層模塊;[0007]所述會(huì)話層模塊上設(shè)置有WebSocket接口和本機(jī)接口,所述表示層包括上層語(yǔ)義模塊和幀結(jié)構(gòu)模塊,所述應(yīng)用層包括沙畫(huà)手法分類(lèi)模塊、筆畫(huà)實(shí)現(xiàn)模塊和沙粒效果實(shí)現(xiàn)模塊;[0008]所述WebSocket接口或本機(jī)接口連接手勢(shì)識(shí)別設(shè)備LeapMot1n,所述上層語(yǔ)義模塊包括手勢(shì)識(shí)別模塊和跟蹤模塊,所述幀結(jié)構(gòu)模塊包括ID幀結(jié)構(gòu)、hands幀結(jié)構(gòu)、pointables幀結(jié)構(gòu)、fingers幀結(jié)構(gòu)和tools幀結(jié)構(gòu)。[0009]所述沙畫(huà)手法分類(lèi)模塊將沙畫(huà)手法分成如下幾類(lèi):1)撒沙、2)鋪沙、3)勾沙、4)抹沙;[0010]所述筆畫(huà)實(shí)現(xiàn)模塊將筆畫(huà)的實(shí)現(xiàn)分成如下步驟:1)設(shè)定一固定距離數(shù)值L,當(dāng)本點(diǎn)距離上一點(diǎn)的距離大于等于L時(shí),取該點(diǎn),否則舍棄該點(diǎn),2)采用貝塞爾曲線的方法將曲線擬合描繪成素材;[0011]所述沙粒效果實(shí)現(xiàn)模塊將沙粒效果的實(shí)現(xiàn)分成如下步驟:1)找出運(yùn)用貝塞爾曲線畫(huà)出的素材的中心線,并設(shè)置遍歷參數(shù)t,2)在素材的上下邊界線上根據(jù)遍歷參數(shù)t進(jìn)行遍歷,并且保持上下邊界遍歷參數(shù)t相等,3)連接對(duì)應(yīng)的兩個(gè)點(diǎn),形成一條直線,即可填充整個(gè)寬線區(qū)域,使素材形成由筆畫(huà)中心線向兩側(cè)透明度越來(lái)越大的沙粒效果。[0012]本專(zhuān)利可以使用手勢(shì)來(lái)實(shí)現(xiàn)沙畫(huà)的創(chuàng)作,減少了用觸摸屏或鼠標(biāo)創(chuàng)作沙畫(huà)的的間斷性,提高了作畫(huà)的效率,增強(qiáng)了人機(jī)交互的體驗(yàn)效果,使得創(chuàng)作沙畫(huà)更加隨心所欲?!靖綀D說(shuō)明】[0013]圖1為本發(fā)明的結(jié)構(gòu)示意圖[0014]圖2為模擬圓的效果示意圖[0015]圖3為在直線AB上隨機(jī)產(chǎn)生沙粒點(diǎn)來(lái)填充圓的效果圖[0016]圖4為改變圖2所示的圓的飽和度后的效果圖[0017]圖5和圖6為調(diào)整沙子透明度的操作示意圖【具體實(shí)施方式】[0018]下面結(jié)合實(shí)施例對(duì)本專(zhuān)利進(jìn)行進(jìn)一步描述:[0019]如圖1所示,一種基于手勢(shì)交互的沙畫(huà)系統(tǒng),包括依次設(shè)置的會(huì)話層模塊,表示層模塊,應(yīng)用層模塊;[0020]所述會(huì)話層模塊上設(shè)置有WebSocket接口和本機(jī)接口,所述表示層包括上層語(yǔ)義模塊和幀結(jié)構(gòu)模塊,所述應(yīng)用層包括沙畫(huà)手法分類(lèi)模塊、筆畫(huà)實(shí)現(xiàn)模塊和沙粒效果實(shí)現(xiàn)模塊;[0021]所述WebSocket接口或本機(jī)接口連接手勢(shì)識(shí)別設(shè)備LeapMot1n,所述上層語(yǔ)義模塊包括手勢(shì)識(shí)別模塊和跟蹤模塊,所述幀結(jié)構(gòu)模塊包括工D幀結(jié)構(gòu)、hands幀結(jié)構(gòu)、pointables幀結(jié)構(gòu)、fingers幀結(jié)構(gòu)和tools幀結(jié)構(gòu)。[0022]所述沙畫(huà)手法分類(lèi)模塊將沙畫(huà)手法分成如下幾類(lèi):1)撒沙、2)鋪沙、3)勾沙、4)抹沙;[0023]所述筆畫(huà)實(shí)現(xiàn)模塊將筆畫(huà)的實(shí)現(xiàn)分成如下步驟:1)設(shè)定一固定距離數(shù)值L,當(dāng)本點(diǎn)距離上一點(diǎn)的距離大于等于L時(shí),取該點(diǎn),否則舍棄該點(diǎn),2)采用貝塞爾曲線的方法將曲線擬合描繪成素材;[0024]如圖5和圖6所示,所述沙粒效果實(shí)現(xiàn)模塊將沙粒效果的實(shí)現(xiàn)分成如下步驟:1)找出運(yùn)用貝塞爾曲線畫(huà)出的素材的中心線,并設(shè)置遍歷參數(shù)t,2)在素材的上下邊界線上根據(jù)遍歷參數(shù)t進(jìn)行遍歷,并且保持上下邊界遍歷參數(shù)t相等,3)連接對(duì)應(yīng)的兩個(gè)點(diǎn),形成一條直線,即可填充整個(gè)寬線區(qū)域,使素材形成由筆畫(huà)中心線向兩側(cè)透明度越來(lái)越大的沙粒效果。[0025]進(jìn)一步的,筆畫(huà)的實(shí)現(xiàn)步驟列舉以下實(shí)施例進(jìn)一步說(shuō)明:[0026]見(jiàn)圖2,分析一個(gè)模擬圓的程序,類(lèi)CCircle的oX,oY,oR成員變量就已經(jīng)描述了一個(gè)完整的圓,但是這個(gè)圓只是一個(gè)框架,內(nèi)部還需要填充沙粒,所以,我們添加了成員函數(shù)OnDraw(OTOpDC)來(lái)畫(huà)出這個(gè)圓,并在圓的內(nèi)部隨機(jī)“撒出沙粒”,我們?cè)谶@里是以一個(gè)像素點(diǎn)來(lái)模擬沙粒。[0027]如圖3示,我們通過(guò)在直線AB上隨機(jī)產(chǎn)生沙粒點(diǎn)的方式來(lái)填充這個(gè)圓,這就是CCircle::Draw(CDOdc)函數(shù)的主要功能。其中AC=CB=maxY,OC=|is-ox。[0028]程序中is開(kāi)始為圓的水平直徑的左端點(diǎn),ie為其右端點(diǎn),is沿著此直徑向右水平移動(dòng),通過(guò)is點(diǎn)作與水平直徑垂直的一條直線,與圓相交于A、B兩點(diǎn),與水平直徑相交于C點(diǎn)。[0029]首先求出AC的長(zhǎng)度maxY=(int)sqrt(oR*oR-(is_oX)*(is_oX));進(jìn)而AB的長(zhǎng)度也可以求得。但是我們?cè)诔绦蛑袑C的長(zhǎng)度的一半賦予了t,并以t自減的方式做了一個(gè)while循環(huán),程序正是通過(guò)這個(gè)while(t-_)循環(huán)在AC線上“打點(diǎn)”產(chǎn)生沙粒的。語(yǔ)句iy=randO%(2*maxY)+oY-maxY;隨機(jī)計(jì)算出了AC線上的一個(gè)點(diǎn)的y坐標(biāo),這里通過(guò)randO%(2*maxY)產(chǎn)生了一個(gè)在(0,2*maxY],也即(0,AC]之間的值,然后與oY-maxY相加就可以產(chǎn)生這個(gè)點(diǎn)的y坐標(biāo)。而這個(gè)點(diǎn)的X坐標(biāo)正是此時(shí)的is值。所以,我們最后用dc->SetPixel(is,iy,RGB(OxFF,OxEC,0x8B));在這個(gè)坐標(biāo)打出一個(gè)黃色的像素來(lái)模擬沙粒。[0030]因?yàn)閣hile循環(huán)的條件是t-不為0,所以自然就是t的初始值了,我們將t置為maxY,所以產(chǎn)生的沙粒數(shù)最多是AC長(zhǎng)度的一半(也就是說(shuō),對(duì)于整個(gè)圓來(lái)說(shuō),將產(chǎn)生整個(gè)圓內(nèi)可填滿像素?cái)?shù)的一半)。[0031]最后,我們需要這條AC線沿著圓的水平直線從is端點(diǎn)移動(dòng)到ie端點(diǎn),每移動(dòng)一個(gè)單位值,就在新的AC線上隨機(jī)產(chǎn)生沙粒,當(dāng)其移動(dòng)到ie端點(diǎn),整個(gè)圓也就用沙粒填充完畢了。所以,程序的最外層還有一個(gè)while循環(huán)while(is++!=ie)來(lái)做這件事。[0032]從效果圖中可以看到程序的效果,圖中整個(gè)圓形的軌跡是由很多這樣的CCircle圓類(lèi)的實(shí)例畫(huà)出來(lái)的,并不是一個(gè)。程序的效果取決于軌跡點(diǎn)之間的間隔距離和單個(gè)圓內(nèi)沙粒的飽和度。[0033]進(jìn)一步的,改變圓的飽和度的實(shí)現(xiàn)步驟列舉以下實(shí)施例進(jìn)一步說(shuō)明:[0034]繼續(xù)分析一個(gè)模擬圓的程序,設(shè)置遍歷參數(shù)t=maxY/8,改變圓的飽和度的效果圖如圖4,從圖中可以看到,沙粒數(shù)明顯減少了。[0035]將間隔度值設(shè)置大一點(diǎn)來(lái)看看效果,為了看到明顯的效果,將CTestCircleView::OnDraw(CDOpDC)函數(shù)中的i+=I改為了i+=20,將圓的飽和度設(shè)為了1,即t=maxY*2,如圖4,原來(lái)平滑連續(xù)的圓形筆畫(huà),蛻變成了粗糙不連續(xù)的甚至接近離散的多個(gè)圓,實(shí)際中的沙畫(huà)產(chǎn)生的筆畫(huà),沙粒密度應(yīng)該是由圓心向外逐漸降低的,即離圓心越近,沙粒數(shù)越多。擴(kuò)展到整條沙畫(huà)線上,就是離沙畫(huà)線中間越近,沙粒數(shù)越多,用這種畫(huà)圓并用像素來(lái)填充的方法是可以實(shí)現(xiàn)的。[0036]上面所述的實(shí)施例僅僅是對(duì)本發(fā)明的優(yōu)選實(shí)施方式進(jìn)行描述,并非對(duì)本發(fā)明的保護(hù)范圍進(jìn)行限定,在不脫離本發(fā)明設(shè)計(jì)精神前提下,本領(lǐng)域普通工程技術(shù)人員對(duì)本發(fā)明技術(shù)方案做出的各種變形和改進(jìn),均應(yīng)落入本發(fā)明的權(quán)利要求書(shū)確定的保護(hù)范圍內(nèi)?!局鳈?quán)項(xiàng)】1.一種基于手勢(shì)交互的沙畫(huà)系統(tǒng),其特征在于,包括依次設(shè)置的會(huì)話層模塊,表示層模塊,應(yīng)用層模塊;所述會(huì)話層模塊上設(shè)置有WebSocket接口和本機(jī)接口,所述表示層包括上層語(yǔ)義模塊和幀結(jié)構(gòu)模塊,所述應(yīng)用層包括沙畫(huà)手法分類(lèi)模塊、筆畫(huà)實(shí)現(xiàn)模塊和沙粒效果實(shí)現(xiàn)模塊;所述WebSocket接口或本機(jī)接口連接手勢(shì)識(shí)別設(shè)備LeapMot1n,所述上層語(yǔ)義模塊包括手勢(shì)識(shí)別模塊和跟蹤模塊,所述幀結(jié)構(gòu)模塊包括ID幀結(jié)構(gòu)、hands幀結(jié)構(gòu)、pointables幀結(jié)構(gòu)、fingers幀結(jié)構(gòu)和tools幀結(jié)構(gòu)。2.根據(jù)權(quán)利要求1所述的一種基于手勢(shì)交互的沙畫(huà)系統(tǒng),其特征在于,所述沙畫(huà)手法分類(lèi)模塊將沙畫(huà)手法分成如下幾類(lèi):1)撒沙、2)鋪沙、3)勾沙、4)抹沙;所述筆畫(huà)實(shí)現(xiàn)模塊將筆畫(huà)的實(shí)現(xiàn)分成如下步驟:1)設(shè)定一固定距離數(shù)值L,當(dāng)本點(diǎn)距離上一點(diǎn)的距離大于等于L時(shí),取該點(diǎn),否則舍棄該點(diǎn),2)采用貝塞爾曲線的方法將曲線擬合描繪成素材;所述沙粒效果實(shí)現(xiàn)模塊將沙粒效果的實(shí)現(xiàn)分成如下步驟:1)找出運(yùn)用貝塞爾曲線畫(huà)出的素材的中心線,并設(shè)置遍歷參數(shù)t,2)在素材的上下邊界線上根據(jù)遍歷參數(shù)t進(jìn)行遍歷,并且保持上下邊界遍歷參數(shù)t相等,3)連接對(duì)應(yīng)的兩個(gè)點(diǎn),形成一條直線,即可填充整個(gè)寬線區(qū)域,使素材形成由筆畫(huà)中心線向兩側(cè)透明度越來(lái)越大的沙粒效果?!緦?zhuān)利摘要】本發(fā)明公開(kāi)了一種基于手勢(shì)交互的沙畫(huà)系統(tǒng),包括依次設(shè)置的會(huì)話層模塊,表示層模塊,應(yīng)用層模塊;所述會(huì)話層模塊上設(shè)置有WebSocket接口和本機(jī)接口,所述表示層包括上層語(yǔ)義模塊和幀結(jié)構(gòu)模塊,所述應(yīng)用層包括沙畫(huà)手法分類(lèi)模塊、筆畫(huà)實(shí)現(xiàn)模塊和沙粒效果實(shí)現(xiàn)模塊;所述WebSocket接口或本機(jī)接口連接手勢(shì)識(shí)別設(shè)備LeapMotion,所述上層語(yǔ)義模塊包括手勢(shì)識(shí)別模塊和跟蹤模塊,所述幀結(jié)構(gòu)模塊包括ID幀結(jié)構(gòu)、hands幀結(jié)構(gòu)、pointables幀結(jié)構(gòu)、fingers幀結(jié)構(gòu)和tools幀結(jié)構(gòu)。本發(fā)明可以使用手勢(shì)來(lái)實(shí)現(xiàn)沙畫(huà)的創(chuàng)作,減少了用觸摸屏或鼠標(biāo)創(chuàng)作沙畫(huà)的間斷性,提高了作畫(huà)的效率,增強(qiáng)了人機(jī)交互的體驗(yàn)效果,使得創(chuàng)作沙畫(huà)更加隨心所欲?!綢PC分類(lèi)】G06T11-80,G06F3-0487【公開(kāi)號(hào)】CN104679411【申請(qǐng)?zhí)枴緾N201510029128【發(fā)明人】王巍,王曉明,劉浩,李林茂,魏丁丁【申請(qǐng)人】河北工程大學(xué)【公開(kāi)日】2015年6月3日【申請(qǐng)日】2015年1月21日