Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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();
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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);
}
Exemplo n.º 5
0
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();
}
Exemplo n.º 6
0
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;
        }
    }
Exemplo n.º 8
0
OsgSceneWindow::OsgSceneWindow() : m_Scene(new Scene()) {
	setSceneData(m_Scene->getRootNode().get());
}
Exemplo n.º 9
0
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();
}