GL_Window::GL_Window(int x, int y, int w, int h, const char *label): Fl_Gl_Window(x, y, w, h, label) { _gw = new osgViewer::GraphicsWindowEmbedded(x,y,w,h); root = new osg::Group; geode = new osg::Geode; osg::ref_ptr<osg::Capsule> myCapsule (new osg::Capsule(osg::Vec3f(),1,2)); osg::ref_ptr<osg::Box> myBox (new osg::Box(osg::Vec3f(),2,2,2)); osg::ref_ptr<osg::Cylinder> myCylinder (new osg::Cylinder(osg::Vec3f(),.75,2.5)); osg::ref_ptr<osg::Sphere> mySphere (new osg::Sphere(osg::Vec3f(),1.5)); osg::ref_ptr<osg::Cone> myCone (new osg::Cone(osg::Vec3f(),1,2)); shape_vec.push_back(new osg::ShapeDrawable(myBox.get())); shape_vec.push_back(new osg::ShapeDrawable(myCapsule.get())); shape_vec.push_back(new osg::ShapeDrawable(myCone.get())); shape_vec.push_back(new osg::ShapeDrawable(myCylinder.get())); shape_vec.push_back(new osg::ShapeDrawable(mySphere.get())); geode->addDrawable(shape_vec[1].get()); // default shape to pick from root->addChild(geode.get()); stateset = geode->getOrCreateStateSet(); // initial material properties diffuse_color.set(1, 1, 1, 1.0); specular_color.set(1,1,1,1); ambient_color.set(1,1,1,1); shininess = 10; alpha = 1; // apply the properties to the material material = new osg::Material; material->setDiffuse(osg::Material::FRONT, diffuse_color); material->setSpecular(osg::Material::FRONT, specular_color); material->setShininess(osg::Material::FRONT, shininess); material->setAmbient(osg::Material::FRONT, ambient_color); stateset->setAttribute(material.get()); //stateset->setMode(GL_LIGHTING, osg::StateAttribute::OFF); texture = new osg::Texture2D; getCamera()->setViewport(new osg::Viewport(0,0,w,h)); getCamera()->setProjectionMatrixAsPerspective(30.0f, static_cast<double>(w)/static_cast<double>(h), 1.0f, 10000.0f); getCamera()->setGraphicsContext(_gw.get()); setSceneData(root.get()); setCameraManipulator(new osgGA::TrackballManipulator); addEventHandler(new osgViewer::StatsHandler); setThreadingModel(osgViewer::Viewer::SingleThreaded); }
void Viewer::setSpaceInformation(uint width, uint height, uint depth) { this->informationNodeScene= new WorldViewer(width,height,depth, 1.0,osg::Vec4(0,0,0,1), 0.5,osg::Vec4(0,0,0,1)); //SET WORLD GRID MATRIX OPTIONAL.. this->informationNodeScene->generateGridMatrix((width+height+depth)/3); this->sceneRootNode->addChild(informationNodeScene); setSceneData(); }
ViewerQT::ViewerQT(QWidget * parent, const char * name, const QGLWidget * shareWidget, WindowFlags f): AdapterWidget( parent, name, shareWidget, f) { setCamera(this->getCamera()); // Camera getCamera()->setViewport(new osg::Viewport(0,0,width(),height())); getCamera()->setProjectionMatrixAsPerspective(30.0f, static_cast<double>(width())/static_cast<double>(height()), 1.0f, 10000.0f); getCamera()->setGraphicsContext(getGraphicsWindow()); getCamera()->setClearColor(osg::Vec4d(51/255.0, 51/255.0, 102/255.0, 0)); getCamera()->setViewMatrix(osg::Matrix::identity()); // // getCamera()->setProjectionMatrixAsOrtho2D(0,1280,0,1024); // // getCamera()->setClearColor(osg::Vec4d(1, 1, 1, 0)); // getCamera()->setReferenceFrame(osg::Transform::ABSOLUTE_RF); // getCamera()->setClearMask(GL_DEPTH_BUFFER_BIT); // getCamera()->setRenderOrder(osg::Camera::POST_RENDER); // getCamera()->setUpdateCallback(new AxisCameraUpdateCallback()); // QString axespath = QCoreApplication::applicationDirPath() + "/axes.osg"; // osg::Node* axes = osgDB::readNodeFile(axespath.toLatin1().data()); // qDebug()<<axes->asGroup()->getNumChildren(); // qDebug()<<axespath; // getCamera()->addChild(axes); // Trackball m_rpTrackball = new osgGA::TrackballManipulator; // setCameraManipulator(m_rpTrackball.get()); addEventHandler(new osgGA::StateSetManipulator(getCamera()->getOrCreateStateSet())); // addEventHandler(new osgViewer::WindowSizeHandler); addEventHandler(new osgViewer::StatsHandler); // Scene root m_rpSceneGroupRoot = new osg::Group; setSceneData(m_rpSceneGroupRoot.get()); osg::Camera* camera = createHUD(); addSlave(camera, false); m_rpSceneGroupRoot->addChild(camera); osgText::Text* text = new osgText::Text; m_rpSceneGroupRoot->addChild( createHUD_viewPoint( text));//加入HUD文字 // pickHandler = new PickHandler; // addEventHandler(pickHandler); addEventHandler(new PickDragHandler(text)); osg::ref_ptr<osgGA::KeySwitchMatrixManipulator> keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator; keyswitchManipulator->addMatrixManipulator(1,"Trackball",new osgGA::TrackballManipulator()); keyswitchManipulator->addMatrixManipulator(2,"Flight",new osgGA::FlightManipulator()); keyswitchManipulator->addMatrixManipulator(3,"Drive",new osgGA::DriveManipulator()); keyswitchManipulator->addMatrixManipulator(4,"Terrain",new osgGA::TerrainManipulator()); setCameraManipulator(keyswitchManipulator.get()); setThreadingModel(osgViewer::Viewer::SingleThreaded); connect(&_timer, SIGNAL(timeout()), this, SLOT(updateGL())); _timer.start(10); }
void TestScene5::runOsg() { // open window auto viewer = new osgViewer::Viewer(); viewer->setUpViewInWindow(560, 240, 800, 600); // adjust camera auto camera = viewer->getCamera(); camera->setViewMatrixAsLookAt(osg::Vec3d(100, 100, 100), osg::Vec3d(0, 0, 0), osg::Vec3d(0, 1, 0)); // load & integrate model auto modelNode = osgDB::readNodeFile("/home/soulmerge/projects/Diplomarbeit/Prototype/resources/Ogre/alexandria.3ds"); auto modelPositioner = new osg::PositionAttitudeTransform(); modelPositioner->addChild(modelNode); modelPositioner->setPosition(osg::Vec3(-100, -100, -100)); viewer->setSceneData(modelPositioner); // loop runOsgLoop(viewer); }
OSGViewerWidget::OSGViewerWidget(QWidget * parent, const QGLWidget * shareWidget, Qt::WindowFlags f) :AdapterWidget(parent, shareWidget, f, true), scene_root_(new osg::Group), other_root_(new osg::Group), gl_thread_(this), threaded_painter_(this) { osg::ref_ptr<osg::Group> root = new osg::Group; root->addChild(scene_root_); root->addChild(other_root_); setSceneData(root); scene_root_->getOrCreateStateSet()->setAttribute(new osg::Point(2.0f), osg::StateAttribute::ON); scene_root_->getOrCreateStateSet()->setAttribute(new osg::LineWidth(1.0f), osg::StateAttribute::ON); setCameraManipulator(new osgGA::TrackballManipulator); addEventHandler(new osgViewer::HelpHandler); addEventHandler(new osgViewer::StatsHandler); addEventHandler(new osgViewer::LODScaleHandler); addEventHandler(new osgViewer::ThreadingHandler); addEventHandler(new osgViewer::ScreenCaptureHandler(new WriteToFile)); addEventHandler(new RecordCameraPathHandler); for (int i = 0; i < 6; ++ i) { osg::ref_ptr<LightSource> light_source = new LightSource(i); light_sources_.push_back(light_source); char index = '0'+i; addEventHandler(new ToggleHandler(light_source, index, std::string("Toggle Light Source ")+index)); addChild(light_source, false); } double w = width(); double h = height(); getCamera()->setViewport(new osg::Viewport(0, 0, w, h)); getCamera()->setProjectionMatrixAsPerspective(60.0f, w/h, 1.0f, 10000.0f); getCamera()->setGraphicsContext(getOrganGraphicsWindow()); getCamera()->setClearColor(osg::Vec4(1, 1, 1, 1.0)); setThreadingModel(osgViewer::Viewer::SingleThreaded); this->doneCurrent(); }
bool Viewer::initScene(std::string& earthfile) { // 创建基础场景 osg::Node* earthNode = osgDB::readNodeFile(earthfile); if (!earthNode) { QMessageBox::warning(0, "警告", ".earth 文件不存在或加载失败"); return false; } _root = new osg::Group; _root->addChild(earthNode); setSceneData(_root); _mapNode = osgEarth::MapNode::findMapNode(earthNode); getCamera()->addCullCallback(new osgEarth::Util::AutoClipPlaneCullCallback(_mapNode)); _manip = new MyEarth::EarthManipulator; setCameraManipulator(_manip); return true; }
bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) { osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa); if (!viewer) return false; switch(ea.getEventType()) { case(osgGA::GUIEventAdapter::KEYUP): { bool handled = 0; if (ea.getKey()=='1') { handled = decimateModel(1); } else if (ea.getKey()=='2') { handled = decimateModel(2); } else if (ea.getKey()=='5') { handled = decimateModel(5); } else if (ea.getKey()=='d') { handled = decimateModel(10); } else if (ea.getKey()=='c') { handled = decimateModel(100); } else if (ea.getKey()=='k') { handled = decimateModel(1000); } else if (ea.getKey()=='y') { handled = swapModels(); } else if (ea.getKey()=='u') { handled = stepbackModels(); } else if (ea.getKey()=='r') { osg::notify(osg::NOTICE)<<"Reloading original model"<<std::endl; handled = reloadModel(); } if (handled) { if (_displayGroup == DISPLAY_LIVE) setSceneData(viewer, _liveNode.get()); else if (_displayGroup == DISPLAY_STEPBACK) setSceneData(viewer, _stepbackNode.get()); else setSceneData(viewer, _copyNode.get()); } return false; } default: return false; } }
OsgSceneWindow::OsgSceneWindow() : m_Scene(new Scene()) { setSceneData(m_Scene->getRootNode().get()); }
ViewerWidget::ViewerWidget(): osgViewer::Viewer() { osg::setNotifyLevel( osg::NOTICE ); //osg::DisplaySettings::instance()->setNumMultiSamples( 4 ); setThreadingModel( osgViewer::Viewer::SingleThreaded ); osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits; { osg::DisplaySettings* ds = osg::DisplaySettings::instance().get(); traits->windowName = "Simple Viewer"; traits->windowDecoration = true; traits->x = 0; traits->y = 0; traits->width = WINDOW_WIDTH; traits->height = WINDOW_HEIGHT; traits->doubleBuffer = true; traits->alpha = ds->getMinimumNumAlphaBits(); traits->stencil = ds->getMinimumNumStencilBits(); traits->sampleBuffers = ds->getMultiSamples(); traits->samples = ds->getNumMultiSamples(); } setUpViewInWindow( 0, 0, traits->width, traits->height ); { osg::Camera* camera = getCamera(); camera->setClearColor( osg::Vec4( 204.0/255, 204.0/255, 204.0/255, 1 ) ); //camera->setViewport( new osg::Viewport( 0, 0, traits->width, traits->height ) ); //camera->setProjectionMatrixAsPerspective( 30.0f, double( traits->width )/double( traits->height ), 1.0f, 100000.0f ); //camera->setComputeNearFarMode(osg::CullSettings::COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES); //camera->setComputeNearFarMode(osg::CullSettings::COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES); _root = new osg::Group; // create sunlight //setLightingMode( osg::View::SKY_LIGHT ); //getLight()->setPosition(osg::Vec4(1000,2000,3000,0)); //getLight()->setDirection(osg::Vec3(-1,-2,-3)); //getLight()->setAmbient(osg::Vec4( 0.6,0.6,0.6,1 )); //getLight()->setDiffuse(osg::Vec4( 0.6,0.6,0.6,1 )); //getLight()->setSpecular(osg::Vec4( 0.9,0.9,0.9,1 )); osg::ref_ptr<osgGA::KeySwitchMatrixManipulator> keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator; keyswitchManipulator->addMatrixManipulator( '1', "Terrain", new osgGA::TerrainManipulator() ); keyswitchManipulator->addMatrixManipulator( '2', "Orbit", new osgGA::OrbitManipulator() ); keyswitchManipulator->addMatrixManipulator( '3', "Trackball", new osgGA::TrackballManipulator() ); setCameraManipulator( keyswitchManipulator.get() ); addEventHandler( new osgViewer::WindowSizeHandler ); addEventHandler( new osgViewer::StatsHandler ); addEventHandler( new osgGA::StateSetManipulator( getCamera()->getOrCreateStateSet() ) ); addEventHandler( new osgViewer::ScreenCaptureHandler ); setFrameStamp( new osg::FrameStamp ); setSceneData( _root.get() ); } // back alpha blending for "transparency" { osg::StateSet* ss = _root->getOrCreateStateSet(); ss->setAttributeAndModes( new osg::CullFace( osg::CullFace::BACK ), osg::StateAttribute::ON ); ss->setMode( GL_BLEND, osg::StateAttribute::ON ); } // SSAO if( 0 ) { osg::StateSet* stateset = _root->getOrCreateStateSet(); //osg::ref_ptr<osg::Program> program = new osg::Program; //program->addShader( new osg::Shader(osg::Shader::VERTEX, vertSourceSSAO) ); //program->addShader( new osg::Shader(osg::Shader::FRAGMENT, fragSourceSSAO) ); //stateset->setAttributeAndModes( program.get() ); stateset->addUniform( new osg::Uniform( "m_SubPixelShift", .5f ) ); stateset->addUniform( new osg::Uniform( "m_SpanMax", 5.f ) ); stateset->addUniform( new osg::Uniform( "m_ReduceMul", 1.f ) ); stateset->addUniform( new osg::Uniform( "g_Resolution", osg::Vec2( WINDOW_WIDTH, WINDOW_HEIGHT ) ) ); osg::Texture2D* texture = new osg::Texture2D(); texture->setTextureSize( WINDOW_WIDTH,WINDOW_HEIGHT ); texture->setInternalFormat( GL_RGBA ); texture->setWrap( osg::Texture2D::WRAP_S,osg::Texture2D::CLAMP_TO_EDGE ); texture->setWrap( osg::Texture2D::WRAP_T,osg::Texture2D::CLAMP_TO_EDGE ); texture->setFilter( osg::Texture2D::MIN_FILTER,osg::Texture2D::LINEAR ); texture->setFilter( osg::Texture2D::MAG_FILTER,osg::Texture2D::LINEAR ); osg::Camera* camera = new osg::Camera; camera->addChild( _root.get() ); osg::Group* newRoot = new osg::Group; newRoot->addChild( camera ); setSceneData( newRoot ); camera->setRenderOrder( osg::Camera::PRE_RENDER ); camera->setRenderTargetImplementation( osg::Camera::FRAME_BUFFER_OBJECT ); //camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF); camera->attach( osg::Camera::COLOR_BUFFER, texture ); camera->setClearMask( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); //camera->setProjectionMatrixAsOrtho2D(0, 0, WINDOW_HEIGHT, WINDOW_WIDTH); //setCameraManipulator( new osgGA::OrbitManipulator ); stateset->addUniform( new osg::Uniform( "m_Texture", texture ) ); // original image view if( 1 ) { //osg::Texture2D* tex = new osg::Texture2D; osg::Geode* geode = new osg::Geode(); osg::Geometry* geom = new osg::Geometry(); geode->addDrawable( geom ); osg::Vec3Array* vtx = new osg::Vec3Array; vtx->push_back( osg::Vec3( 0, 0, 0 ) ); // front left vtx->push_back( osg::Vec3( WINDOW_WIDTH, 0, 0 ) ); // front right vtx->push_back( osg::Vec3( WINDOW_WIDTH, WINDOW_HEIGHT, 0 ) ); // back right vtx->push_back( osg::Vec3( 0,WINDOW_HEIGHT, 0 ) ); // back left geom->setVertexArray( vtx ); osg::DrawElementsUInt* quads = new osg::DrawElementsUInt( osg::PrimitiveSet::QUADS, 0 ); quads->push_back( 0 ); quads->push_back( 1 ); quads->push_back( 2 ); quads->push_back( 3 ); geom->addPrimitiveSet( quads ); osg::Vec2Array* texcoords = new osg::Vec2Array( 5 ); ( *texcoords )[0].set( 0.f,0.f ); // tex coord for vertex 0 ( *texcoords )[1].set( 1.f,0.f ); // tex coord for vertex 1 ( *texcoords )[2].set( 1.f,1.f ); // tex coord for vertex 1 ( *texcoords )[3].set( 0.f,1.f ); // tex coord for vertex 1 geom->setTexCoordArray( 0,texcoords ); geode->getOrCreateStateSet()->setTextureAttributeAndModes( 0,texture,osg::StateAttribute::ON ); osg::Camera* normalCamera = new osg::Camera(); normalCamera->setClearColor( osg::Vec4( 0.4f,0.4f,0.4f,1.0f ) ); normalCamera->setClearMask( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); normalCamera->setViewport( 0,0,WINDOW_WIDTH,WINDOW_HEIGHT ); normalCamera->setProjectionMatrixAsOrtho2D( 0,WINDOW_HEIGHT,0,WINDOW_HEIGHT ); normalCamera->setReferenceFrame( osg::Transform::ABSOLUTE_RF ); normalCamera->setViewMatrix( osg::Matrix::identity() ); normalCamera->setComputeNearFarMode( osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR ); normalCamera->addChild( geode ); //textureGroup->addChild( normalCamera ); newRoot->addChild( normalCamera ); } } realize(); }