void key(unsigned char key, int x, int y) { switch ( key ) { case 27: root = NULL; file = NULL; cam = NULL; vp = NULL; win = NULL; cam_trans = NULL; scene_trans = NULL; pPoly = NULL; pCOver = NULL; gwin = NULL; tx1o = NULL; tx1e = NULL; vpFBO = NULL; vpFBO_RB = NULL; pTexBuffer = NULL; pRenBuffer = NULL; pImg = NULL; delete rentravact; OSG::osgExit(); exit(0); case 'f': vpFBO->setTravMask(~vpFBO->getTravMask()); break; case 'd': oldTravMask = vpFBO->getTravMask(); if(oldTravMask == 0x0000) { vpFBO->setTravMask(~vpFBO->getTravMask()); } dumpImg = true; pTexBuffer ->setReadBack (true); vpFBO->getFrameBufferObject()->setPostProcessOnDeactivate(true); break; case 'r': { // OSG::FieldContainerFactory::the()->dump(); //RenderBuffer Readback // Background OSG::SolidBackgroundUnrecPtr bkgndFBO_RB = OSG::SolidBackground::create(); bkgndFBO_RB->setColor(OSG::Color3f(0.5,1.0,0.5)); // Viewport vpFBO_RB = OSG::FBOViewport::create(); vpFBO_RB->setCamera (cam ); vpFBO_RB->setBackground(bkgndFBO_RB); vpFBO_RB->setRoot (root ); vpFBO_RB->setSize (0, 0, 1, 1 ); OSG::FrameBufferObjectUnrecPtr pFBO_RB = OSG::FrameBufferObject::create(); pRenBuffer = OSG::RenderBuffer::create(); OSG::RenderBufferUnrecPtr pDepthBuffer_RB = OSG::RenderBuffer::create(); pDepthBuffer_RB->setInternalFormat(GL_DEPTH_COMPONENT24 ); pRenBuffer->setInternalFormat(GL_RGBA); OSG::ImageUnrecPtr pImg_RB = OSG::Image::create(); OSG::UInt32 uiImgSize = 4096; pImg_RB->set(OSG::Image::OSG_RGB_PF, uiImgSize, uiImgSize); fprintf(stderr, "Image data : %p\n", pImg_RB->getData()); pRenBuffer->setImage(pImg_RB); pFBO_RB->setSize(uiImgSize, uiImgSize); pFBO_RB->setColorAttachment(pRenBuffer, 0); pFBO_RB->setDepthAttachment(pDepthBuffer_RB ); pFBO_RB->editMFDrawBuffers()->clear(); pFBO_RB->editMFDrawBuffers()->push_back(GL_COLOR_ATTACHMENT0_EXT); vpFBO_RB->setFrameBufferObject(pFBO_RB); pRenBuffer ->setReadBack (true); vpFBO_RB->getFrameBufferObject()->setPostProcessOnDeactivate(true); win->addPort(vpFBO_RB); dumpImg_RB = true; } break; case 'v': rentravact->setVolumeDrawing(!rentravact->getVolumeDrawing()); break; case 'a': glDisable( GL_LIGHTING ); std::cerr << "Lighting disabled." << std::endl; break; case 's': glEnable( GL_LIGHTING ); std::cerr << "Lighting enabled." << std::endl; 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 ' ': { OSG::Matrix m; OSG::Quaternion q; OSG::Vec3f v; q = oldq; v = oldv; oldq = tball.getRotation(); oldv = tball.getPosition(); move_obj = ! move_obj; if ( move_obj ) { puts("moving object"); // m = scene_trans->getSFMatrix()->getValue(); tball.setMode( OSG::Trackball::OSGCamera ); } else { puts("moving camera"); // m = cam_trans->getSFMatrix()->getValue(); tball.setMode( OSG::Trackball::OSGObject ); } // q.setValue(m); tball.setStartPosition( v, true ); tball.setStartRotation( q, true ); // std::cout << q << std::endl; // std::cout << v << std::endl; // std::cout << " " << m[3][0] << " " << m[3][1] << " " << m[3][2] << std::endl; } break; } }
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; } }