// The initialisation function __declspec(dllexport) void alvar_init(int width, int height) { w = width; h = height; // Calibration. See manual and ALVAR internal samples how to calibrate your camera // Calibration will make the marker detecting and marker pose calculation more accurate. if (! camera.SetCalib("Calibrations/default_calib.xml", w, h)) { camera.SetRes(w, h); } // Set projection matrix as ALVAR recommends (based on the camera calibration) double p[16]; camera.GetOpenglProjectionMatrix(p, w, h); //Initialize the multimarker system for(int i = 0; i < MARKER_COUNT; ++i) markerIdVector.push_back(i); // We make the initialization for MultiMarkerBundle using a fixed marker field (can be printed from MultiMarker.ppt) markerDetector.SetMarkerSize(CORNER_MARKER_SIZE); markerDetector.SetMarkerSizeForId(0, CENTRE_MARKER_SIZE); multiMarker = new alvar::MultiMarker(markerIdVector); alvar::Pose pose; pose.Reset(); // Add the 5 markers multiMarker->PointCloudAdd(0, CENTRE_MARKER_SIZE, pose); pose.SetTranslation(-10, 6, 0); multiMarker->PointCloudAdd(1, CORNER_MARKER_SIZE, pose); pose.SetTranslation(10, 6, 0); multiMarker->PointCloudAdd(2, CORNER_MARKER_SIZE, pose); pose.SetTranslation(-10, -6, 0); multiMarker->PointCloudAdd(3, CORNER_MARKER_SIZE, pose); pose.SetTranslation(+10, -6, 0); multiMarker->PointCloudAdd(4, CORNER_MARKER_SIZE, pose); trackerStat.Reset(); }