Example #1
0
bool SDLViewer::setUpViewerAsOSGGraphicsWindow(const char *caption, const ScreenSettings & screenSettings)
{
	if ( screenSettings.fullScreen )
	{
		setUpViewOnSingleScreen();
	}
	else
	{
		setUpViewInWindow(50, 50, screenSettings.width, screenSettings.height);
	}
	return true;
}
Example #2
0
void
TestScene3::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));
	// loop
	runOsgLoop(viewer);
}
Example #3
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);
}
Example #4
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();
}