【发布时间】:2013-03-21 12:02:31
【问题描述】:
我希望能够使用 Kinect 让光标统一工作。我通过使用 kinect sdk 作为统一插件而不使用 openni 来做到这一点,我设法让它工作了一半,但它并没有真正完善。目前我让它沿着 x 轴工作,但它没有覆盖整个屏幕。将光标从屏幕中心开始并相应地移动会更理想。当更多地向屏幕右侧移动时,它只会移动到一半。我宁愿不硬编码浮点数,而是根据屏幕计算。在统一中,有一个可以扩展到世界的功能
void Update () {
if (sw.pollSkeleton())
{
distance.x=sw.bonePos[0,2].x - sw.bonePos[0,7].x;//bonpos 0,2 is the spine 0,7 is the left hand
//spine position will usually be around (0.1,1.2,0.3)
/*
Debug.Log("the distance is"+distance.x);
*/
/*
* (-0.2,1.4,0.7) hand over head on left side// essentially by this trime
* (-0.3,1.0,0.6) hand near shoulders resonably high (-0.4,1.0,0.7) shoulders meaning anything 1.0 region
* (-0.2,0.6,0.7) hand lower torso level curser should then be alive
* (-)
* (-0.1,0.7,0.3)hand at the side shouldnt record curser (-0.1,0.5,0.3) 0.0 -0.1
*
*/
/*
* (0.3,1.3,0.8)left hand over head on right side
* (0.2,1.0,0.8) hand higher up on the other side right shoulder (0.4,1.0,0.7) further right
* (0.3,0.9,0.7) hand lower then shoullder but pointing towards the right
* (0.3,0.7,0.6) hand lower right below waist
* (0.2,0.7,0.5) hand close to groin and spine
*/
//if the left hands x axis is less than that of the spine
//
if(sw.bonePos[0,7].x<sw.bonePos[0,2].x)
{
//distance being 0.2053766 * -0.5f
difference = -0.5f*distance.x;
//difference being -0.1026883
Debug.Log("hand is over by the left");
}
if(sw.bonePos[0,7].x>=sw.bonePos[0,2].x)
{
difference = -0.8f*distance.x;
Debug.Log("hand is over by the right");
}
Debug.Log("Dist: " + distance.x + ", Diff: " + difference);
Debug.Log("The spine is positioned at :" +sw.bonePos[0,2]+"The left hand is at :" +sw.bonePos[0,7]+" the position of the cursor"+transform.position);
}
}
void OnGUI() {
//left top width height
Rect r = new Rect(Screen.width * (difference + 0.3f),0.5f*Screen.height,100,100);
/*screen.width 480 * 0.1973117,0.5f*1280,100,100
*
*
*/
GUI.Label(r,cursor);
//GUI.DrawTexture();
}
}
【问题讨论】: