对于V1
<span style="white-space:pre"> </span>INuiSensor * pNuiSensor; HRESULT hr; int iSensorCount = 0; hr = NuiGetSensorCount(&iSensorCount); if (FAILED(hr)) { return hr; } //轮询每一个Kinect sensor for (int i = 0; i < iSensorCount; ++i) { // Create the sensor so we can check status, if we can't create it, move on to the next hr = NuiCreateSensorByIndex(i, &pNuiSensor); if (FAILED(hr)) { continue; } // 得到传感器状态, and 如果已连接,进行初始化 hr = pNuiSensor->NuiStatus(); if (S_OK == hr) { m_PNuiSensor = pNuiSensor; break; } //既然不使用,释放 pNuiSensor->Release(); }
对于V2
//多台kinect
IKinectSensorCollection* pKinectCollection = nullptr; IEnumKinectSensor* pEnumKinect = nullptr; IKinectSensor* pKinect = nullptr; // 获取Kinect集合 HRESULT hr = ::GetKinectSensorCollection(&pKinectCollection); // 获取Kinect枚举器 if (SUCCEEDED(hr)){ hr = pKinectCollection->get_Enumerator(&pEnumKinect); } // 枚举Kinect if (SUCCEEDED(hr)){ BOOLEAN available = false; while (true){ // 获取下一个 if (SUCCEEDED(pEnumKinect->GetNext(&pKinect))){ // 判断有效性 pKinect->get_IsAvailable(&available); if (available && YourJudgmentFunc(pKinect)){ break; } SafeRelease(pKinect); } else break; } } SafeRelease(pEnumKinect); SafeRelease(pKinectCollection);