ofVec3f ofCairoRenderer::transform(ofVec3f vec){ if(!b3D) return vec; vec = modelView.preMult(vec); vec = projection.preMult(vec); //vec.set(vec.x/vec.z*viewportRect.width*0.5-ofGetWidth()*0.5-viewportRect.x,vec.y/vec.z*viewportRect.height*0.5-ofGetHeight()*0.5-viewportRect.y); vec.set(vec.x/vec.z*ofGetWidth()*0.5,vec.y/vec.z*ofGetHeight()*0.5); return vec; }
void ofxARToolkitPlus::getTranslationAndOrientation(int markerIndex, ofVec3f &translation, ofMatrix4x4 &orientation) { ARToolKitPlus::ARMarkerInfo marker = tracker->getDetectedMarker(markerIndex); getTransMat( &marker, c, m34 ); // Translation translation.set(m34[0][3], m34[1][3], m34[2][3]); // Orientation orientation.set(m34[0][0], m34[0][1], m34[0][2], 0, m34[1][0], m34[1][1], m34[1][2], 0, m34[2][0], m34[2][1], m34[2][2], 0, 0, 0, 0, 1); }
void ofxARToolkitPlus::getMultiMarkerTranslationAndOrientation(ofVec3f &translation, ofMatrix4x4 &orientation) { const ARToolKitPlus::ARMultiMarkerInfoT *multiMarkerConst = tracker->getMultiMarkerConfig(); if(multiMarkerConst != NULL) { // Create a copy of the ARMultiMarkerInfoT struct ARToolKitPlus::ARMultiMarkerInfoT mm; size_t mmSize = sizeof(ARToolKitPlus::ARMultiMarkerInfoT); memcpy(&mm, multiMarkerConst, mmSize); // Copy and pass in the markers int numberOfMarkers = tracker->getNumDetectedMarkers(); #ifdef TARGET_WIN32 ARToolKitPlus::ARMarkerInfo *marker = new ARToolKitPlus::ARMarkerInfo[numberOfMarkers]; #else ARToolKitPlus::ARMarkerInfo marker[numberOfMarkers]; #endif for (int i=0; i<numberOfMarkers; i++) { marker[i] = tracker->getDetectedMarker(i); } float result = tracker->rppMultiGetTransMat(marker, numberOfMarkers, &mm); // Check for error - yes this does occur if(result < 0 || result >= INT_MAX) { tracker->arMultiGetTransMat(marker, numberOfMarkers, &mm); ofLog(OF_LOG_VERBOSE, "RPP failed on multimarker"); } // Translation translation.set(mm.trans[0][3], mm.trans[1][3], mm.trans[2][3]); // Orientation orientation.set(mm.trans[0][0], mm.trans[0][1], mm.trans[0][2], 0, mm.trans[1][0], mm.trans[1][1], mm.trans[1][2], 0, mm.trans[2][0], mm.trans[2][1], mm.trans[2][2], 0, 0, 0, 0, 1); #ifdef TARGET_WIN32 free(marker); #endif } else { ofLog(OF_LOG_VERBOSE, "MultiMarkerConfig file NULL"); } }
//-------------------------------------------------------------- void testApp::setup(){ g_Rotation = ofQuaternion(0.0f, 0.0f, 0.0f, 1.0f); g_RotateStart = ofQuaternion(0.0f, 0.0f, 0.0f, 1.0f); g_LightDirection.set(-0.57735f, -0.57735f, -0.57735f); // Create some 3D objects (stored in display lists) glNewList(SHAPE_TEAPOT, GL_COMPILE); glutSolidTeapot(1.0); glEndList(); glNewList(SHAPE_TORUS, GL_COMPILE); glutSolidTorus(0.3, 1.0, 16, 32); glEndList(); glNewList(SHAPE_CONE, GL_COMPILE); glutSolidCone(1.0, 1.5, 64, 4); glEndList(); float axis[] = { 0.7f, 0.7f, 0.0f }; // initial model rotation float angle = 0.8f; // Init rotation SetQuaternionFromAxisAngle(axis, angle, g_Rotation); SetQuaternionFromAxisAngle(axis, angle, g_RotateStart); //TWEAK BAR bar.init("TweakBar", 200, 400, 200, 200, 200, 100); bar.enable(); bar.addParam("Zoom", &g_Zoom, " min=0.01 max=500.0 step=1.0 keyIncr=z keyDecr=Z help='Scale the object (1=original size).' ", false); bar.addParam("ObjRotation", &g_Rotation, " label='Object rotation' open help='Change the object orientation.' ", false); bar.addParam("Multiplier", &g_LightMultiplier, " label='Light booster' min=0.1 max=4 step=0.02 keyIncr='+' keyDecr='-' help='Increase/decrease the light power.' ", false); bar.addParam("LightDir", &g_LightDirection, " label='Light direction' open help='Change the light direction.' ", false); bar.addSeparator("separator"); bar.addParam("Ambient", g_MatAmbient, " group='Material' ", false, TW_TYPE_COLOR3F); bar.addParam("Diffuse", g_MatDiffuse, " group='Material' ", false, TW_TYPE_COLOR3F); }
Vec3Test() { cout << "!!! 0" << endl; v0.set(0, 0, 0); v1.set(10, 10, 10); }
void update() { #ifdef INSTALL if(cam.update()) { ofPixels& pixels = cam.getColorPixels(); #else cam.update(); if(cam.isFrameNew()) { ofPixels& pixels = cam.getPixelsRef(); #endif // next two could be replaced with one line ofxCv::rotate90(pixels, rotated, rotate ? 270 : 0); ofxCv:flip(rotated, rotated, 1); Mat rotatedMat = toCv(rotated); if(tracker.update(rotatedMat)) { ofVec2f position = tracker.getPosition(); vector<FaceTrackerData*> neighbors = data.getNeighborsCount(position, neighborCount); FaceTrackerData curData; curData.load(tracker); if(!neighbors.empty()) { nearestData = *faceCompare.nearest(curData, neighbors); if(nearestData.label != lastLabel) { similar.loadImage(nearestData.getImageFilename()); #ifdef INSTALL whitePoint = getWhitePoint(similar); #else whitePoint.set(1, 1, 1); #endif } lastLabel = nearestData.label; } if(faceCompare.different(curData, currentData) && faceCompare.different(curData, neighbors)) { saveFace(curData, rotated); currentData.push_back(pair<ofVec2f, FaceTrackerData>(position, curData)); } } presence.update(tracker.getFound()); if(presence.wasTriggered()) { presenceFade.stop(); } if(presence.wasUntriggered()) { for(int i = 0; i < currentData.size(); i++) { data.add(currentData[i].first, currentData[i].second); } currentData.clear(); presenceFade.start(); } } } void draw() { ofBackground(255); CGDisplayHideCursor(NULL); ofSetColor(255); if(similar.isAllocated()) { shader.begin(); shader.setUniformTexture("tex", similar, 0); shader.setUniform3fv("whitePoint", (float*) &whitePoint); similar.draw(0, 0); shader.end(); } ofPushStyle(); if(presenceFade.getActive()) { ofSetColor(0, ofMap(presenceFade.get(), 0, 1, 0, 128)); ofFill(); ofRect(0, 0, ofGetWidth(), ofGetHeight()); ofSetColor(255, ofMap(presenceFade.get(), 0, 1, 0, 32)); data.drawBins(); ofSetColor(255, ofMap(presenceFade.get(), 0, 1, 0, 64)); data.drawData(); } ofSetColor(255, 64); ofNoFill(); if(!tracker.getFound()) { ofCircle(tracker.getPosition(), 10); } tracker.draw(); ofPopStyle(); #ifndef INSTALL drawFramerate(); #endif }