/** * @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(); }
/** * @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(¶bolicCylinderPoints); stimDrawerBlack.setStimulus(¶bolicCylinderPoints); float randomDotsSize = util::str2num<float>(parameters.find("RandomDotsSize")); if (parameters.find("DotsColor")=="RedAndBlack") { stimDrawerRed.initList(¶bolicCylinderPoints,glRed,randomDotsSize); parabolicCylinderPoints.compute(); stimDrawerBlack.initList(¶bolicCylinderPoints,glBlack,randomDotsSize); surface.setUniformColor(glRed); } else { stimDrawerRed.initList(¶bolicCylinderPoints,glWhite,randomDotsSize); parabolicCylinderPoints.compute(); stimDrawerBlack.initList(¶bolicCylinderPoints,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); } }
/** * @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; } } }