-
大小: 11.44MB文件類型: .zip金幣: 1下載: 0 次發(fā)布日期: 2023-06-19
- 語言: C/C++
- 標(biāo)簽: KinectV2??;??鼠標(biāo)控制??
資源簡介
這里提供一個kinectV2控制鼠標(biāo)的C++版本程序,同時包含Chengaotan版本的C#程序供參考,Kinect 自身可實現(xiàn)三種手勢的識別,拳頭,剪刀,和布,從而可控制鼠標(biāo)做不同的事情;本人已將其運用到體感游戲打飛機(jī)上,效果不錯,附上打飛機(jī)體感游戲博客地址:http://blog.csdn.net/qq_34609108/article/details/78082849
代碼片段和文件信息
#include?“KinectControl.h“
#include?
#include?
int?KinectControl::lassoCount?=?0;
KinectControl::KinectControl():???//各種類型變量的初始化
mouseSensitivity?(?MOUSE_SENSITIVITY)
timeRequired?(TIME_REQUIRED)
doClick?(DO_CLICK)
useGripGesture?(USE_GRIP_GESTURE)
cursorSmoothing?(?CURSOR_SMOOTHING)
{
alreadyTrackedPos?=?false;?
wasLeftGrip?=?false;?
wasRightGrip?=?false;?
lasso?=?false;
lastCurPos?=?{?0?0?};
m_pSensor???????????=?nullptr;
m_pframeDescription?=?nullptr;
m_pBodySource?=?nullptr;
m_pBodyReader?=?nullptr;
m_pBodyframe??=?nullptr;
//?獲取屏幕的大小與尺寸
?screenWidth?=?GetSystemMetrics(SM_CXSCREEN);
?screenHeight?=?GetSystemMetrics(SM_CYSCREEN);
}
HRESULT?KinectControl::InitializeDefaultSensor()
{
//kinect?Body幀的準(zhǔn)備,直接開好Reader
HRESULT?hr;
hr?=?GetDefaultKinectSensor(&m_pSensor);
if?(FAILED(hr))
{
return?hr;
}
if?(m_pSensor)
{
hr?=?m_pSensor->Open();
m_pSensor->get_BodyframeSource(&m_pBodySource);
m_pBodySource->OpenReader(&m_pBodyReader);
}
return?hr;
}
//主要數(shù)據(jù)更新區(qū)域
void??KinectControl::Update()
{
//因為每0.1秒循環(huán),用lasso?也就是手勢剪刀來標(biāo)記?鼠標(biāo)雙擊?,?一次點擊按下,要2秒等待,實現(xiàn)下一次點擊,否則剪刀手勢下一直點擊
if?(lasso) lassoCount++;
if?(lassoCount?>?20)
?{
?lassoCount?=?0;
?lasso?=?false;
?}
while?(m_pBodyReader->AcquireLatestframe(&m_pBodyframe)?!=?S_OK); //讀取Body數(shù)據(jù)
int bodyBufferSize?=?0;
m_pBodySource->get_BodyCount(&bodyBufferSize);
IBody **?bodyArray?=?new?IBody?*[bodyBufferSize];
for?(int?i?=?0;?i? {
bodyArray[i]?=?nullptr;
}
m_pBodyframe->GetAndRefreshBodyData(bodyBufferSize?bodyArray);
for?(int?i?=?0;?i? {
BOOLEAN?result?=?false;
if?(bodyArray[i]->get_IsTracked(&result)?==?S_OK?&&?result)
{
Joint jointArray[JointType_Count]; //將關(guān)節(jié)點輸出,正式開始處理
bodyArray[i]->GetJoints(JointType_Count?jointArray);
if?(jointArray[JointType_Neck].TrackingState?!=?TrackingState_Tracked?||
jointArray[JointType_Head].TrackingState?!=?TrackingState_Tracked)
continue;
CameraSpacePoint?handLeft?=?jointArray[JointType_HandLeft].Position;????//左手掌
CameraSpacePoint?spinebase?=?jointArray[JointType_Spinebase].Position;??//脊椎基部
CameraSpacePoint?handRight?=?jointArray[JointType_HandRight].Position;??//右手掌
if?(handRight.Z?-?spinebase.Z?-0.15f)?//?if?right?hand?lift?forward
{
/*如果是右手按此計算。我們不使用肩膀的位置作為參考,因為導(dǎo)致右肩膀通常是在舉起的右手后面,位置將被推斷和不穩(wěn)定。
因為脊柱的基礎(chǔ)是在右手的左邊,我們加0.05f使其更加接近權(quán)*/
float?x?=?handRight.X?-?spinebase.X?+?0.05f;
/*?hand?y?calculated?by?this.?ss?spine?base?is?way?lower?than?right?hand?we?plus?0.51f?to?make?it
*?higer?the?value?0.51f?is?worked?out?by?testing?for?a?several?times?you?can?set?it?as?another?one?you?like.?*/
float?y?=?spinebase.Y?-?handRight.Y?+?0.51f;
//?get?current?cursor?position
POINT?curPos;
GetCursorPos(&curPos);
//?smoothing?for?using?should?be?0?-?0.95f.?Th
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-10-25?08:42??MyKinectTouch\
?????目錄???????????0??2017-10-25?08:14??MyKinectTouch\Debug\
?????文件???????73728??2017-10-25?08:42??MyKinectTouch\Debug\MyKinectTouch.exe
?????文件??????528872??2017-10-25?08:42??MyKinectTouch\Debug\MyKinectTouch.ilk
?????文件?????2289664??2017-10-25?08:42??MyKinectTouch\Debug\MyKinectTouch.pdb
?????目錄???????????0??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\
?????目錄???????????0??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\Debug\
?????文件??????199670??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\Debug\KinectControl.obj
?????文件???????39080??2017-09-19?16:29??MyKinectTouch\MyKinectTouch\Debug\MouseControl.obj
?????文件????????2462??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.log
?????文件??????170589??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.obj
?????目錄???????????0??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\
?????文件??????128334??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\CL.read.1.tlog
?????文件????????5728??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\CL.write.1.tlog
?????文件?????????174??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\MyKinectTouch.lastbuildstate
?????文件????????5152??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\cl.command.1.tlog
?????文件????????9502??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\li
?????文件???????14216??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\li
?????文件????????2220??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\li
?????文件?????1739776??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\Debug\vc120.idb
?????文件?????1667072??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\Debug\vc120.pdb
?????文件????????6584??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\KinectControl.cpp
?????文件????????1892??2017-10-25?08:42??MyKinectTouch\MyKinectTouch\KinectControl.h
?????文件????????1368??2017-09-18?14:49??MyKinectTouch\MyKinectTouch\MyKinectTouch.aps
?????文件?????????677??2017-10-25?08:26??MyKinectTouch\MyKinectTouch\MyKinectTouch.cpp
?????文件????????4222??2017-09-19?16:33??MyKinectTouch\MyKinectTouch\MyKinectTouch.vcxproj
?????文件????????1177??2017-09-19?16:33??MyKinectTouch\MyKinectTouch\MyKinectTouch.vcxproj.filters
?????文件????34406400??2017-10-25?08:42??MyKinectTouch\MyKinectTouch.sdf
?????文件?????????985??2017-09-18?14:43??MyKinectTouch\MyKinectTouch.sln
?????文件???????38912??2017-10-25?08:42??MyKinectTouch\MyKinectTouch.v12.suo
?????目錄???????????0??2017-10-25?08:14??MyKinectTouch\WpfApplication1?C#版應(yīng)用程序\
............此處省略53個文件信息
評論
共有 條評論