1:获取Kinect 感应器
NuiCreateSensorByIndex函数的标注
功能:创建一个Kinect感应器的实例
参数一:感应器的标号,有多台的话,从0开始标记的,最后一台为NuiGetSensorCount -1
参数二:指向打开的感应器
返回值: S_OK if successful;
Ps:
NuiGetSensorCount函数标注:
功能:返回连接到电脑的Kinect的数目
参数:int *pCount pCount指向一个int类型的数据值,这个int用来存放一个整个,这个整个就是电脑中的Kinect的数目
m_instanceId = m_pNuiSensor->NuiDeviceConnectionId();
INuiSensor::NuiDeviceConnectionId method标注
2:为彩色数据 深度数据 骨架数据创建相应的事件函数
PS:根据bate版本的说明,为每一种流数据类型创建一种对应的事件,当数据到达的时候,采用相应的事件来处理相应相应数据。分以下六步:
1:创建事件关联到每一种数据上,程序等待数据的到达,根据数据类型采用相应的事件进行处理[同C#]
2:初始化结构骨骼渲染
3:初始化图像结构渲染
4:初始化Kinect感应器
5:打开深度和彩色数据流
6:创建Kinect感应器数据处理线程
CreateEvent 函数标注
功能:创建事件句柄
参数一:安全性描述符,新版本必须设置为NULL
参数二:BOOL类型,如果事件需要手动重置则设置为TRUE
参数三:BOOL类型,指示事件的初始状态
参数四:string类型,包含事件的名字
3:初始化感应器的NUI函数库(初始化感应器)
nuiFlags =
NUI_INITIALIZE_FLAG_USES_DEPTH |
}
INuiSensor::NuiInitialize Method批注
功能:初始化NUI引擎
参数:NUI_ INITIALIZE
返回值:S_OK if successful
Constant | Description |
NUI_INITIALIZE_FLAG_USES_AUDIO | Provide audio data. |
NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEX | Provide depth data and identify the player index. |
NUI_INITIALIZE_FLAG_USES_COLOR | Provide color data. |
NUI_INITIALIZE_FLAG_USES_SKELETON | Provide skeleton data. |
NUI_INITIALIZE_FLAG_USES_DEPTH | Provide depth data. |
NUI_INITIALIZE_DEFAULT_HARDWARE_THREAD | Initialize a default hardware thread. |
4 :打开骨架提取功能 //骨架功能特有的
if ( HasSkeletalEngine (m_pNuiSensor))
HasSkeletalEngine 批注
功能:Determines whether the sensor instance has a skeletal(骨骼) engine
参数:感应器实例
返回值: true if the sensor instance has a skeletal engine; otherwise, false
INuiSensor::NuiSkeletonTrackingEnabl
功能:Enables skeleton tracking功能
参数一:一个与应用程序相关联的人工重置类型的事件的句柄。这个句柄要满足,不论在什么情形下,都做人工重置的工作
参数二: Flags that control skeleton tracking , combination of the values in the following table.
返回值:S_OK if successful
5:创建彩色和深度数据流
NUI_IMAGE_TYPE_DEPTH,
&m_pDepthStreamHandle );
功能:打开图像数据流-image stream
参数一:决定图像数据流的类型。NUI_IMAGE_TYPE类型的数据
参数二:决定图像的分辨率。NUI_IMAGE_RESOLUTION类型的数据
参数三:图像预处理字段,目前为0
参数四:应用程序能够同时控制的缓存数目。
参数五:处理数据的事件句柄。
参数六:一个位置,用于接受一个用于打开数据流功能的句柄
返回值:S_OK if successful
6:开始处理NUI数据
7:获取彩色数据
void CSkeletalViewerApp::Nui_GotVideoAlert( )
{
HRESULT hr =
hr= m_pNuiSensor->NuiImageStreamReleaseFra
}
INuiSensor::NuiImageStreamGetNextFra
功能:从图像数据流里面提取下一帧的数据
参数一:图像数据流的句柄,这里的数据流必须是NuiImageStreamOpen 方法打开的数据流,实际上就是深度数据帧的句柄
参数二:等待一个帧需要的时间
参数三:一个NUI_IMAGE_FRAME结构的变量,用来指向接受到的帧的存储位置
返回值:S_OK if successful; otherwise, returns a failure code.
INuiSensor::NuiImageStreamReleaseFra
功能:从数据流里面释放数据帧
参数一:图像数据流的句柄,这里的数据流必须是NuiImageStreamOpen 方法打开的数据流,实际就是m_pNuiSensor->NuiImageStreamGetNextFra
参数二:一个指针,指向将要释放的数据帧的位置,实际就是m_pNuiSensor->NuiImageStreamGetNextFra
返回值:S_OK if successful; returns one of the following failure codes: E_INVALIDARG
INuiFrameTexture::LockRect Method批注
功能:锁定缓存
参数一:Unused; must be 0.
参数二:一个 指向NUI_LOCKED_RECT 结构的指针,结构体里面储存锁定区域的信息
参数三:Unused
参数四:Unused
返回值: S_OK if successful; otherwise, returns a failure code.
8:获取深度数据流
void CSkeletalViewerApp::Nui_GotDepthAlert( )
{
}
以下代码的功能是实现人物远近的体现
PS:
9:获取人物骨骼数据
if( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED ||
(SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_POSITION_ONLY && m_bAppTracking))
10:光滑骨骼数据
HRESULT hr = m_pNuiSensor->NuiTransformSmooth(&SkeletonFrame,NULL);
}
11:输出骨骼数据
if( SkeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED &&
// Nui_DrawSkeletonSegment是自定义函数。
}
NuiGetSensorCount批注
功能:Returns the number of Kinect sensors that are connected to the computer
参数一:指向一个int的数据类型,这个int类型的数据储存感应器的数目
返回值:S_OK if successful; otherwise, returns a failure code
NuiCreateSensorByIndex批注
功能:创建一个指定索引的Kinect实例,使我们的应用程序能够打开和使用他
参数一:Kinect的索引值从0开始,有效的值是NuiGetSensorCount – 1
参数二:A pointer that receives a reference to the created INuiSensor interface
返回值:S_OK if successful; otherwise, returns one of the failure codes in the following table
NUI_INITIALIZE
Kinect sensor initialization options when calling NuiInitialize. These may be combined using a bitwise OR.
RGBQUAD CSkeletalViewerApp::Nui_ShortToQuad_Depth( USHORT s )
{
USHORT RealDepth = NuiDepthPixelToDepth(s);
功能:从像素格式中解压出深度数据值
参数:压缩的深度像素值
返回值:Returns the unpacked pixel depth
USHORT Player
功能:从像素格式中解压出玩家的索引代码号
参数:压缩的深度像素值
返回值:Returns the unpacked player index
}
NuiSkeletonGetNextFrame的批注
功能:从数据流中获取下一骨架帧数据
参数一:在没有新的一帧时,返回之前帧暂停
参数二:一个指向NUI_SKELETON_FRAME结构的指针。NUI_SKELETON_FRAME 结构用于储存下一帧骨架数据。
返回值:S_OK if successful; returns E_POINTER OR E_NUI_FRAME_NO_DATA.
INuiSensor::NuiTransformSmooth Method 批注
功能:对帧进行过滤,减少两帧之间的抖动。
参数一:调用的时候,是一个指向NUI_SKELETON_FRAME 结构的指针。NUI_SKELETON_FRAME 结构里面储存需要需要光滑处理的数据。结束的时候这个指向指向的结构里面是光滑处理后的结果。如果函数调用失败,则不变化。
参数二:The parameters for the smoothing function,没有给予参数的时候,使用的是默认值
返回值:S_OK if successful