void bot_lcmgl_draw_axes(bot_lcmgl_t * lcmgl, const Eigen::Affine3d & trans, double scale) { lcmglPushMatrix(); lcmglMultMatrixd(trans.data()); lcmglScalef(scale, scale, scale); bot_lcmgl_draw_axes(lcmgl); lcmglPopMatrix(); }
void drawRedDotsPlane() { int planeTilt = (int)factors.at("Tilt"); int planeSlant = (int)factors.at("Slant"); double planeDef = factors.at("Def"); double planeOnset=1; bool backprojectionActive=true; double theta=0.0; Eigen::Affine3d modelTransformation; glPushMatrix(); //glLoadIdentity(); //glTranslated(0,0,focalDistance); glMultMatrixd(stimTransformation.data()); switch ( planeTilt ) { case 0: { theta = -acos(exp(-0.346574+0.5*planeDef-planeDef/2*(1-planeOnset*periodicValue/oscillationAmplitude))); glRotated(toDegrees(theta),0,1,0); if (backprojectionActive) glScaled(1/sin(toRadians( -90-planeSlant)),1,1); //backprojection phase } break; case 90: { theta = -acos(exp(-0.346574+0.5*planeDef-planeDef/2*(1-planeOnset*periodicValue/oscillationAmplitude))); glRotated( toDegrees(theta),1,0,0); if (backprojectionActive) glScaled(1,1/sin(toRadians( -90-planeSlant )),1); //backprojection phase } break; case 180: { theta = acos(exp(-0.346574+0.5*planeDef-planeDef/2*(1+planeOnset*periodicValue/oscillationAmplitude))); glRotated(toDegrees(theta),0,1,0); if (backprojectionActive) glScaled(1/sin(toRadians( -90-planeSlant )),1,1); //backprojection phase } break; case 270: { theta = acos(exp(-0.346574+0.5*planeDef-planeDef/2*(1+planeOnset*periodicValue/oscillationAmplitude))); glRotated( toDegrees(theta),1,0,0); if (backprojectionActive) glScaled(1,1/sin(toRadians( -90-planeSlant )),1); //backprojection phase } break; default: cerr << "Error, select tilt to be {0,90,180,270} only" << endl; } stimDrawer.draw(); glGetDoublev(GL_MODELVIEW_MATRIX,modelTransformation.matrix().data()); modelTransformation.matrix() = modelTransformation.matrix().eval(); glPopMatrix(); }
/** * @brief drawStimulus */ void drawStimulus() { ////////////////////////////// // Update stimuli double oscillationAmplitude=50.0; double oscillationPeriod=100.0; static double timeFrame=0.0; timeFrame+=1.0; if ( !trial.getCurrent().at("StimulusAnchored") ) { // FISSO glPushMatrix(); glLoadIdentity(); Vector3d translationFactor(0,0,focalDistance); double instantPlaneSlant = trial.getCurrent().at("Slant"); switch ( (int) trial.getCurrent().at("Tilt") ) { case 0: { glTranslated( translationFactor.x(), translationFactor.y(), translationFactor.z()); glRotated( -instantPlaneSlant ,0,1,0); glScaled(1/sin(toRadians( -90-trial.getCurrent().at("Slant"))),1,1); //backprojection phase break; } case 90: { glTranslated( translationFactor.x(), translationFactor.y(), translationFactor.z()); glRotated( -instantPlaneSlant ,1,0,0); glScaled(1,1/sin(toRadians( -90-trial.getCurrent().at("Slant") )),1); //backprojection phase break; } case 180: { glTranslated( translationFactor.x(), translationFactor.y(), translationFactor.z()); glRotated( -instantPlaneSlant ,0,1,0); glScaled(1/sin(toRadians( -90-trial.getCurrent().at("Slant") )),1,1); //backprojection phase break; } case 270: { glTranslated( translationFactor.x(), translationFactor.y(), translationFactor.z()); glRotated( -instantPlaneSlant ,1,0,0); glScaled(1,1/sin(toRadians( -90-trial.getCurrent().at("Slant") )),1); //backprojection phase break; } } glGetDoublev(GL_MODELVIEW_MATRIX,objectActiveTransformation.data()); stimDrawer.draw(); glPopMatrix(); } else { // ANCORATO glPushMatrix(); glLoadMatrixd( (headEyeCoords.getRigidStart().getFullTransformation()*Translation3d(Vector3d(0,0,focalDistance))).data() ); glGetDoublev(GL_MODELVIEW_MATRIX,objectActiveTransformation.data()); stimDrawer.draw(); glPopMatrix(); } // Draw the occlusor if ( useCircularOcclusor ) { double maskRadius=parameters.get("CircularOcclusorRadius"); glPushMatrix(); glLoadIdentity(); Vector3d projCoords; if ( trial.getCurrent().at("StimulusAnchored") ) projCoords << project( (headEyeCoords.getRigidStart().getFullTransformation()*Translation3d(Vector3d(0,0,focalDistance))).translation() ); else projCoords << project( Vector3d(0,0,focalDistance) ); circleMask( projCoords.x(), projCoords.y(), maskRadius ); glPopMatrix(); } bool passiveMode=false; stimDrawer.projectStimulusPoints( objectActiveTransformation, headEyeCoords.getRigidStart().getFullTransformation(), cam, focalDistance, screen, eyeCalibration, passiveMode, true); }