Esempio n. 1
0
void initVariables()
{
    cam.setOrthoGraphicProjection((bool)str2num<int>(parameters.find("OrthographicMode")));
    drawInfo = (bool)util::str2num<int>(parameters.find("DrawInfo"));
    //cam.setOrthoGraphicProjection(orthoMode);
    cerr << "COMPUTED IOD=" << interoculardistance  << endl;
    trial.init(parameters);

    stimulusTime=util::str2num<double>(parameters.find("StimulusTime"));
    trialTimer.start();

    trial.next();
    interoculardistance = str2num<double>(parameters.find("IOD"))*trial.getCurrent().at("IODFactor");

    int textureResolution = util::str2num<int>(parameters.find("TextureResolution"));
    int maxTextureResolutionZ = (int) std::ceil(textureResolution*util::str2num<double>(parameters.find("MaxCurvatureZ")));
    // allocate the texture memory
    if (parameters.find("UsePolkaDots")=="1")
    {
        surface.resize(textureResolution,textureResolution, maxTextureResolutionZ);
        surface.initializeSurfaceShaders(VolumetricSurfaceIntersection::SurfaceParabolicCylinder);
    }
    updateStimulus(trial.getCurrent().at("CurvatureZ"));
    CurvatureZ=0.0;
}
Esempio n. 2
0
/**
 * @brief initRendering
 */
void initRendering()
{
    glShadeModel(GL_SMOOTH);
    glEnable(GL_MULTISAMPLE);
    
    glEnable(GL_DEPTH_TEST);
    glEnable (GL_BLEND);
    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glClearColor(0.0,0.0,0.0,1.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0,0,eyeDistance);

    int nspheres=500;
    int minRadius=15;
    int maxRadius=50;
    glewInit();
    surface.resize(iWidth,iHeight,iDepth*3);
    surface.fillVolumeWithSpheres(nspheres,minRadius,maxRadius);
    surface.initializeTexture();
    surface.initializeSurfaceShaders(VolumetricSurfaceIntersection::SurfaceParabolicCylinder);

    surface.parabolicCylinderSurface.curvature=1.0;
    surface.parabolicCylinderSurface.centerX=surface.parabolicCylinderSurface.centerY=surface.parabolicCylinderSurface.centerZ=0.0;

    surface.parabolaSurface.curvature=1.0;
    surface.coneSurface.c=1.0;
    surface.ellipsoidSurface.axisX=1.0;
    surface.ellipsoidSurface.axisY=1.0;
    surface.ellipsoidSurface.axisZ=1.0;
    surface.ellipticCylinderSurface.axisX=1.0;
    surface.ellipticCylinderSurface.height=1.0;
    surface.ellipticCylinderSurface.axisZ=1.0;
    getGLerrors();
}
Esempio n. 3
0
/**
 * @brief drawStimulus
 */
void drawStimulus()
{
    double radiusX = util::str2num<double>(parameters.find("RadiusX"));
    glPushMatrix();
    glLoadIdentity();
    glTranslated(0,0,focalDistance);
    //if (horizontal) glRotated(90,0,0,1);
    glScaled(radiusX,radiusX,radiusX);
    //glRotated(90,0,1,0); //for lateral debug mode
    if ( parameters.find("UsePolkaDots")=="1")
        surface.draw();
    glPopMatrix();

    glPushAttrib(GL_ALL_ATTRIB_BITS);
    glDisable(GL_TEXTURE_3D);
    glPushMatrix();
    glLoadIdentity();
    glTranslated(0,0,focalDistance+0.02);
    //    if ( horizontal ) glRotated(90,0,0,1);

    glScaled(radiusX,radiusX,radiusX);
    //glRotated(90,0,1,0); //for lateral debug mode
    if (parameters.find("AddRandomNoise")=="1")
    {
        stimDrawerRed.draw();
        //stimDrawerBlack.draw();
    }
    glPopMatrix();
    glPopAttrib();
}
Esempio n. 4
0
/**
 * @brief updateStimulus
 * @param CurvatureZ
 */
void updateStimulus(double CurvatureZ)
{
    double radiusX = util::str2num<double>(parameters.find("RadiusX"));
    double noiseDensity = util::str2num<double>(parameters.find("RandomNoiseDensity"));

    int nRandomDots = mathcommon::getParaboloidArea(radiusX,CurvatureZ)*noiseDensity;
    parabolicCylinderPoints.setNpoints(nRandomDots);
    parabolicCylinderPoints.setCurvature(CurvatureZ);
    parabolicCylinderPoints.setFluffiness(0.0);
    parabolicCylinderPoints.compute();

    stimDrawerBlack.setSpheres(false);
    stimDrawerRed.setSpheres(false);

    stimDrawerRed.setStimulus(&parabolicCylinderPoints);
    stimDrawerBlack.setStimulus(&parabolicCylinderPoints);

    float randomDotsSize = util::str2num<float>(parameters.find("RandomDotsSize"));
    if (parameters.find("DotsColor")=="RedAndBlack")
    {
        stimDrawerRed.initList(&parabolicCylinderPoints,glRed,randomDotsSize);
        parabolicCylinderPoints.compute();
        stimDrawerBlack.initList(&parabolicCylinderPoints,glBlack,randomDotsSize);
        surface.setUniformColor(glRed);
    }
    else
    {
        stimDrawerRed.initList(&parabolicCylinderPoints,glWhite,randomDotsSize);
        parabolicCylinderPoints.compute();
        stimDrawerBlack.initList(&parabolicCylinderPoints,glWhite,randomDotsSize);
        surface.setUniformColor(glWhite);
    }

    if ( parameters.find("UsePolkaDots")=="1" )
    {
        int nSpheres = util::str2num<int>(parameters.find("TotalPolkaDots"));
        int dotsRadiusMin = util::str2num<int>(parameters.find("PolkaDotsRadiusMin"));
        int dotsRadiusMax = util::str2num<int>(parameters.find("PolkaDotsRadiusMax"));
        int textureResolution = util::str2num<int>(parameters.find("TextureResolution"));
        //surface.fillVolumeWithSpheres2(nSpheres,nSpheres,nSpheres*util::str2num<double>(parameters.find("MaxCurvatureZ")),dotsRadiusMin,dotsRadiusMax);
        surface.fillVolumeWithSpheres(nSpheres,dotsRadiusMin ,dotsRadiusMax);
        surface.initializeTexture();
        surface.parabolicCylinderSurface.curvature=CurvatureZ;
        //surface.setUniformColor(glWhite);
    }
}
Esempio n. 5
0
/**
 * @brief handleKeypress
 * @param key
 * @param x
 * @param y
 */
void handleKeypress(unsigned char key, int x, int y)
{
    switch (key)
    {  case 'q': //Escape key
    {
        exit(0);
        break;
    }
    case ' ':
    {
        surface.fillVolumeWithSpheres(1500,5,10);
        surface.initializeTexture();
        break;
    }
    case '+':
    {
        eyeDistance+=0.5;
        break;
    }
    case '-':
    {        eyeDistance-=0.5;
        break;
    }
    case 'a':
    {
        surface.parabolaSurface.curvature+=0.01;
        surface.parabolicCylinderSurface.curvature+=0.01;
        break;
    }
    case 'z':
    {
        surface.parabolaSurface.curvature-=0.01;
        surface.parabolicCylinderSurface.curvature-=0.01;
        break;
    }
    }
}
Esempio n. 6
0
/**
 * @brief drawThings
 */
void drawThings()
{
    GLText text(width,height,glWhite);
    text.init(width,height,glWhite);
    text.enterTextInputMode();
    text.draw("C= "+util::stringify(surface.parabolaSurface.curvature));
    text.leaveTextInputMode();
    glPushMatrix();
    glLoadIdentity();
    glTranslated(0,0,eyeDistance);
    glScaled(10,10,10);
    arcball.applyRotationMatrix();
    surface.draw();
    glPopMatrix();
    getGLerrors();
}