void key(unsigned char key, int x, int y)
{
    switch ( key )
    {
        case 27:    
            win         = NULL;
            cam_trans   = NULL;
            pPoly       = NULL;
            pCOver      = NULL;
            pAlgo       = NULL;

            rentravact  = NULL;

            OSG::osgExit(); 

            exit(0);

        case 'v':
            rentravact->setVolumeDrawing(!rentravact->getVolumeDrawing());
            break;

        case 'z':   
            pPoly->setFrontMode(GL_POINT);
            pPoly->setBackMode(GL_POINT);
            std::cerr << "PolygonMode: Point." << std::endl;
            break;

        case 'x':   
            pPoly->setFrontMode(GL_LINE);
            pPoly->setBackMode(GL_LINE);
            std::cerr << "PolygonMode: Line." << std::endl;
            break;

        case 'c':   
            pPoly->setFrontMode(GL_FILL);
            pPoly->setBackMode(GL_FILL);
            std::cerr << "PolygonMode: Fill." << std::endl;
            break;

        case 'p':
        {
            if(bPolyActive == true)
            {
                OSG_ASSERT(pCOver->subChunk(pPoly) == true);
                bPolyActive = false;
            }
            else
            {
                OSG_ASSERT(pCOver->addChunk(pPoly) == true);
                bPolyActive = true;
            }
            break;
        }

		case 'w':
			pAlgo->setStepsize(pAlgo->getStepsize() + (1.0/2048.0));

			if(pAlgo->getStepsize() > 0.25) 
                pAlgo->setStepsize(0.25);

			break;

		case 'e':
			pAlgo->setStepsize(pAlgo->getStepsize() - (1.0/2048.0));
            
			if(pAlgo->getStepsize() <= 1.0/200.0) 
                pAlgo->setStepsize(1.0/200.0);
			break;

        case 'd':
            pAlgo->setToggleVisuals(!pAlgo->getToggleVisuals());
            break;
            
        default:
            break;
    }
}