Share Pastebin
Guest
Public paste!

osgEarth problem

By: a guest | Mar 22nd, 2010 | Syntax: C++ | Size: 3.46 KB | Hits: 253 | Expires: Never
Copy text to clipboard
  1. #include <osgEarth/MapNode>
  2. #include <osgEarth/FindNode>
  3. #include <osgEarth/TileSource>
  4. #include <osgEarth/Registry>
  5. #include <osgEarthUtil/EarthManipulator>
  6.  
  7. #include <osgViewer/Viewer>
  8. #include <osgViewer/ViewerEventHandlers>
  9.  
  10. #include <osgGA/StateSetManipulator>
  11.  
  12. #include <iostream>
  13.  
  14. #define SHOW_PROBLEM 1
  15.  
  16. using namespace osg;
  17. using namespace osgEarth;
  18. using namespace osgEarthUtil;
  19.  
  20. struct BlankTileSource : public osgEarth::TileSource
  21. {
  22.    BlankTileSource(const PluginOptions* options =0L) : osgEarth::TileSource( options ) { }
  23.  
  24.    virtual void initialize( const std::string& referenceURI, const Profile* overrideProfile =0)
  25.    {
  26.       if (overrideProfile)
  27.       {
  28.          setProfile( overrideProfile );
  29.       }
  30.       else
  31.       {
  32.          setProfile( osgEarth::Registry::instance()->getGlobalGeodeticProfile() );
  33.       }
  34.    }
  35.  
  36.  
  37.    virtual osg::Image* createImage( const TileKey* key, ProgressCallback* progress ) {
  38.       osg::Image* image = new osg::Image();
  39.       image->setAllocationMode( osg::Image::USE_NEW_DELETE );
  40.       image->allocateImage( 256, 256, 1, GL_RGBA, GL_UNSIGNED_BYTE );
  41.       for( int y=0; y<image->t(); y++ ) {
  42.          for( int x=0; x<image->s(); x++ ) {
  43.             *((unsigned int*)(image->data(x,y))) = 0xff00ff00;
  44.          }
  45.       }
  46.       return image;
  47.    }
  48. };
  49.  
  50. int main(int argc, char** argv)
  51. {
  52.    // construct the viewer.
  53.    osgViewer::Viewer viewer();
  54.  
  55.    // construct the main scene group.
  56.    osg::Group* group = new osg::Group;
  57.  
  58.    // construct the map.
  59.    Map *map = new Map;
  60.  
  61.    TileSource *tileSource = new BlankTileSource();
  62.    tileSource->initialize("");
  63.    MapLayer* layer = new MapLayer( "Green", MapLayer::TYPE_IMAGE, tileSource);
  64.    map->addMapLayer(layer);
  65.  
  66.    MapNode* mapNode = new MapNode(map);
  67.  
  68.    // construct pre-render texture.
  69.    osg::Texture2D *renderTex = new osg::Texture2D;
  70.    renderTex->setTextureSize(1024, 1024);
  71.    renderTex->setDataVariance(osg::Object::DYNAMIC);
  72.    renderTex->setInternalFormat(GL_RGBA);
  73.    renderTex->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR);
  74.    renderTex->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::LINEAR);
  75.  
  76.    // construct pre-render camera.
  77.    osg::Camera* camera = new osg::Camera;
  78.    camera->setRenderOrder(osg::Camera::PRE_RENDER);
  79.    camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
  80.    camera->setComputeNearFarMode(osg::CullSettings::COMPUTE_NEAR_FAR_USING_PRIMITIVES);
  81.    camera->setNearFarRatio(0.000003f);
  82.    camera->setClearColor(osg::Vec4(0.8f, 0.8f, 0.8f, 1.f));
  83.    camera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  84.    camera->setViewport(0, 0, 1024, 1024);
  85.    camera->attach(osg::Camera::COLOR_BUFFER, renderTex);
  86.    renderTex->setDataVariance(osg::Object::DYNAMIC);
  87.    camera->addChild(mapNode);
  88.  
  89. #if SHOW_PROBLEM == 0
  90.    group->addChild(camera);
  91. #endif
  92.  
  93.    // create scene.
  94.    group->addChild(mapNode);
  95.  
  96.    // setup viewer.
  97.    viewer.setCameraManipulator( new osgEarthUtil::EarthManipulator() );
  98.    viewer.setUpViewInWindow(10, 10, 800, 800);
  99.    viewer.addEventHandler( new osgViewer::StatsHandler() );
  100.    viewer.addEventHandler( new osgViewer::WindowSizeHandler() );
  101.    viewer.addEventHandler( new osgViewer::ThreadingHandler() );
  102.    viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );
  103.  
  104.    // set the scene to render.
  105.    viewer.setSceneData(group);
  106.  
  107.    // run the viewers frame loop.
  108.    return viewer.run();
  109. }