int configKinect(){ XnStatus rc = XN_STATUS_OK; xn::EnumerationErrors errors; // Initialize OpenNI rc = g_Context.InitFromXmlFile(SAMPLE_XML_PATH, g_ScriptNode, &errors); CHECK_ERRORS(rc, errors, "InitFromXmlFile"); CHECK_RC(rc, "InitFromXmlFile"); rc = g_Context.FindExistingNode(XN_NODE_TYPE_DEPTH, g_DepthGenerator); CHECK_RC(rc, "Find depth generator"); rc = g_Context.FindExistingNode(XN_NODE_TYPE_GESTURE, g_GestureGenerator); CHECK_RC(rc, "Find gesture generator"); XnCallbackHandle hGestureIntermediateStageCompleted, hGestureProgress, hGestureReadyForNextIntermediateStage; g_GestureGenerator.RegisterToGestureIntermediateStageCompleted(GestureIntermediateStageCompletedHandler, NULL, hGestureIntermediateStageCompleted); g_GestureGenerator.RegisterToGestureReadyForNextIntermediateStage(GestureReadyForNextIntermediateStageHandler, NULL, hGestureReadyForNextIntermediateStage); g_GestureGenerator.RegisterGestureCallbacks(NULL, GestureProgressHandler, NULL, hGestureProgress); // Create NITE objects g_pSessionManager = new XnVSessionManager; rc = g_pSessionManager->Initialize(&g_Context, "Click,Wave", "RaiseHand"); CHECK_RC(rc, "SessionManager::Initialize"); g_pSessionManager->RegisterSession(NULL, SessionStarting, SessionEnding, FocusProgress); pointHandler = new PointHandler(20, g_DepthGenerator); g_pFlowRouter = new XnVFlowRouter; g_pFlowRouter->SetActive(pointHandler); g_pSessionManager->AddListener(g_pFlowRouter); pointHandler->RegisterNoPoints(NULL, NoHands); // Initialization done. Start generating rc = g_Context.StartGeneratingAll(); CHECK_RC(rc, "StartGenerating"); return rc; }
int main(int argc, char ** argv) { XnStatus rc = XN_STATUS_OK; xn::EnumerationErrors errors; // Initialize OpenNI rc = g_Context.InitFromXmlFile(SAMPLE_XML_PATH, g_ScriptNode, &errors); CHECK_ERRORS(rc, errors, "InitFromXmlFile"); CHECK_RC(rc, "InitFromXmlFile"); rc = g_Context.FindExistingNode(XN_NODE_TYPE_DEPTH, g_DepthGenerator); CHECK_RC(rc, "Find depth generator"); rc = g_Context.FindExistingNode(XN_NODE_TYPE_HANDS, g_HandsGenerator); CHECK_RC(rc, "Find hands generator"); rc = g_Context.FindExistingNode(XN_NODE_TYPE_GESTURE, g_GestureGenerator); CHECK_RC(rc, "Find gesture generator"); XnCallbackHandle h; if (g_HandsGenerator.IsCapabilitySupported(XN_CAPABILITY_HAND_TOUCHING_FOV_EDGE)) { g_HandsGenerator.GetHandTouchingFOVEdgeCap().RegisterToHandTouchingFOVEdge(TouchingCallback, NULL, h); } XnCallbackHandle hGestureIntermediateStageCompleted, hGestureProgress, hGestureReadyForNextIntermediateStage; g_GestureGenerator.RegisterToGestureIntermediateStageCompleted(GestureIntermediateStageCompletedHandler, NULL, hGestureIntermediateStageCompleted); g_GestureGenerator.RegisterToGestureReadyForNextIntermediateStage(GestureReadyForNextIntermediateStageHandler, NULL, hGestureReadyForNextIntermediateStage); g_GestureGenerator.RegisterGestureCallbacks(NULL, GestureProgressHandler, NULL, hGestureProgress); // Create NITE objects g_pSessionManager = new XnVSessionManager; rc = g_pSessionManager->Initialize(&g_Context, "Click,Wave", "RaiseHand"); CHECK_RC(rc, "SessionManager::Initialize"); g_pSessionManager->RegisterSession(NULL, SessionStarting, SessionEnding, FocusProgress); g_pDrawer = new XnVPointDrawer(20, g_DepthGenerator); g_pFlowRouter = new XnVFlowRouter; g_pFlowRouter->SetActive(g_pDrawer); g_pSessionManager->AddListener(g_pFlowRouter); g_pDrawer->RegisterNoPoints(NULL, NoHands); g_pDrawer->SetDepthMap(g_bDrawDepthMap); // Initialization done. Start generating rc = g_Context.StartGeneratingAll(); CHECK_RC(rc, "StartGenerating"); // Mainloop #ifdef USE_GLUT glInit(&argc, argv); glutMainLoop(); #elif defined(USE_GLES) if (!opengles_init(GL_WIN_SIZE_X, GL_WIN_SIZE_Y, &display, &surface, &context)) { printf("Error initializing opengles\n"); CleanupExit(); } glDisable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glEnableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_COLOR_ARRAY); while ((!_kbhit()) && (!g_bQuit)) { glutDisplay(); eglSwapBuffers(display, surface); } opengles_shutdown(display, surface, context); CleanupExit(); #endif }