int CybPhantom::initHL() { //TODO HABILITAR O OUTPUT FORCE NA HD. HDErrorInfo error; hapticDevice = hdInitDevice(HD_DEFAULT_DEVICE); if(HD_DEVICE_ERROR(error = hdGetError())) { //Falta tratar o erro! hduPrintError(stderr, &error, "Failed to initialize haptic device"); return -1; } checkCalibrationStatus(&stateCalibration); hapticContext = hlCreateContext(hapticDevice); hlMakeCurrent(hapticContext); hlTouchableFace(HL_FRONT_AND_BACK); hlEnable(HL_HAPTIC_CAMERA_VIEW); //hlEnable(HL_ADAPTIVE_VIEWPORT); //hdEnable(HD_FORCE_OUTPUT); return 0; }
int CHapticViewerView::drawSceneHL(Mesh* pObj) { int triDrawCount = 0; hlBeginFrame(); hlCheckEvents(); HLboolean buttDown; hlGetBooleanv(HL_BUTTON1_STATE, &buttDown); if (buttDown && pObj->isDragging) { updateDragObjectTransform(pObj); } if (m_bHapticCameraView) hlEnable(HL_HAPTIC_CAMERA_VIEW); else hlDisable(HL_HAPTIC_CAMERA_VIEW); if (m_bHapticAdaptiveViewport) hlEnable(HL_ADAPTIVE_VIEWPORT); else hlDisable(HL_ADAPTIVE_VIEWPORT); if (m_bShapeDepthBuffer) hlBeginShape(HL_SHAPE_DEPTH_BUFFER, pObj->shapeId); else hlBeginShape(HL_SHAPE_FEEDBACK_BUFFER, pObj->shapeId); const bool isHapticView = true; triDrawCount = drawSceneGL(pObj, isHapticView); hlEndShape(); hlEndFrame(); return triDrawCount; }
/******************************************************************************* Initialize the HDAPI. This involves initing a device configuration, enabling forces, and scheduling a haptic thread callback for servicing the device. *******************************************************************************/ void initHL() { HDErrorInfo error; ghHD = hdInitDevice( HD_DEFAULT_DEVICE ); if (HD_DEVICE_ERROR(error = hdGetError())) { hduPrintError(stderr, &error, "Failed to initialize haptic device"); fprintf(stderr, "Press any key to exit"); getchar(); exit(-1); } /************************************************************* ADDED *************************************************************/ hdScheduleAsynchronous(hdBeginCB, 0, HD_MAX_SCHEDULER_PRIORITY); hdScheduleAsynchronous(hdEndCB, 0, HD_MIN_SCHEDULER_PRIORITY); /************************************************************* END ADDED *************************************************************/ ghHLRC = hlCreateContext(ghHD); hlMakeCurrent(ghHLRC); // Enable optimization of the viewing parameters when rendering // geometry for OpenHaptics. hlEnable(HL_HAPTIC_CAMERA_VIEW); // Generate id for the shape. gShapeId = hlGenShapes(1); gPointId = hlGenShapes(1); hlTouchableFace(HL_FRONT); hlAddEventCallback(HL_EVENT_TOUCH,gPointId , HL_COLLISION_THREAD, hlTouchCB, 0); hlAddEventCallback(HL_EVENT_UNTOUCH,gPointId , HL_COLLISION_THREAD, hlUnTouchCB, 0); }
/******************************************************************************* Initialize the HDAPI. This involves initing a device configuration, enabling forces, and scheduling a haptic thread callback for servicing the device. *******************************************************************************/ void initHL() { HDErrorInfo error; hHD = hdInitDevice(HD_DEFAULT_DEVICE); if (HD_DEVICE_ERROR(error = hdGetError())) { hduPrintError(stderr, &error, "Failed to initialize haptic device"); fprintf(stderr, "Press any key to exit"); getchar(); exit(-1); } hHLRC = hlCreateContext(hHD); hlMakeCurrent(hHLRC); // Enable optimization of the viewing parameters when rendering // geometry for OpenHaptics. hlEnable(HL_HAPTIC_CAMERA_VIEW); // Generate id's for the three shapes. gSphereShapeId = hlGenShapes(1); gTorusShapeId = hlGenShapes(1); gTeapotShapeId = hlGenShapes(1); // Setup event callbacks. hlAddEventCallback(HL_EVENT_TOUCH, HL_OBJECT_ANY, HL_CLIENT_THREAD, &touchShapeCallback, NULL); hlAddEventCallback(HL_EVENT_UNTOUCH, HL_OBJECT_ANY, HL_CLIENT_THREAD, &untouchShapeCallback, NULL); hlAddEventCallback(HL_EVENT_TOUCH, gSphereShapeId, HL_CLIENT_THREAD, &touchSphereCallback, NULL); hlAddEventCallback(HL_EVENT_UNTOUCH, gSphereShapeId, HL_CLIENT_THREAD, &untouchSphereCallback, NULL); hlAddEventCallback(HL_EVENT_TOUCH, gTorusShapeId, HL_CLIENT_THREAD, &touchTorusCallback, NULL); hlAddEventCallback(HL_EVENT_UNTOUCH, gTorusShapeId, HL_CLIENT_THREAD, &untouchTorusCallback, NULL); hlAddEventCallback(HL_EVENT_TOUCH, gTeapotShapeId, HL_CLIENT_THREAD, &touchTeapotCallback, NULL); hlAddEventCallback(HL_EVENT_UNTOUCH, gTeapotShapeId, HL_CLIENT_THREAD, &untouchTeapotCallback, NULL); hlAddEventCallback(HL_EVENT_1BUTTONDOWN, HL_OBJECT_ANY, HL_CLIENT_THREAD, &button1DownCallback, NULL); hlAddEventCallback(HL_EVENT_1BUTTONUP, HL_OBJECT_ANY, HL_CLIENT_THREAD, &button1UpCallback, NULL); hlAddEventCallback(HL_EVENT_2BUTTONDOWN, HL_OBJECT_ANY, HL_CLIENT_THREAD, &button2DownCallback, NULL); hlAddEventCallback(HL_EVENT_2BUTTONUP, HL_OBJECT_ANY, HL_CLIENT_THREAD, &button2UpCallback, NULL); hlAddEventCallback(HL_EVENT_3BUTTONDOWN, HL_OBJECT_ANY, HL_CLIENT_THREAD, &button3DownCallback, NULL); hlAddEventCallback(HL_EVENT_3BUTTONUP, HL_OBJECT_ANY, HL_CLIENT_THREAD, &button3UpCallback, NULL); hlAddEventCallback(HL_EVENT_1BUTTONDOWN, gSphereShapeId, HL_CLIENT_THREAD, &button1DownSphereCallback, NULL); hlAddEventCallback(HL_EVENT_1BUTTONUP, gSphereShapeId, HL_CLIENT_THREAD, &button1UpSphereCallback, NULL); hlAddEventCallback(HL_EVENT_MOTION, HL_OBJECT_ANY, HL_CLIENT_THREAD, &motionCallback, NULL); hlAddEventCallback(HL_EVENT_MOTION, gSphereShapeId, HL_CLIENT_THREAD, &motionOnSphereCallback, NULL); hlAddEventCallback(HL_EVENT_CALIBRATION_UPDATE, HL_OBJECT_ANY, HL_CLIENT_THREAD, &calibrationCallback, NULL); hlAddEventCallback(HL_EVENT_CALIBRATION_INPUT, HL_OBJECT_ANY, HL_CLIENT_THREAD, &calibrationCallback, NULL); }