bool SDLViewer::setUpViewerAsOSGGraphicsWindow(const char *caption, const ScreenSettings & screenSettings) { if ( screenSettings.fullScreen ) { setUpViewOnSingleScreen(); } else { setUpViewInWindow(50, 50, screenSettings.width, screenSettings.height); } return true; }
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); }
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); }
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(); }