Changeset 4273 for trunk/packages/vizservers/geovis/Renderer.cpp
- Timestamp:
- Mar 26, 2014 3:25:30 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/packages/vizservers/geovis/Renderer.cpp
r4247 r4273 23 23 #include <osgEarth/Bounds> 24 24 #include <osgEarth/Profile> 25 #include <osgEarth/Viewpoint> 25 26 #include <osgEarth/TerrainLayer> 26 27 #include <osgEarth/ImageLayer> … … 82 83 _manipulator = new osgEarth::Util::EarthManipulator; 83 84 _viewer->setCameraManipulator(_manipulator.get()); 84 _viewer->addEventHandler(new osgGA::StateSetManipulator(_viewer->getCamera()->getOrCreateStateSet())); 85 _stateManip = new osgGA::StateSetManipulator(_viewer->getCamera()->getOrCreateStateSet()); 86 _viewer->addEventHandler(_stateManip); 85 87 _coordsCallback = new MouseCoordsCallback(); 86 88 _mouseCoordsTool = new osgEarth::Util::MouseCoordsTool(mapNode); … … 293 295 mpOpt.color() = osg::Vec4(1, 1, 1, 1); 294 296 //mpOpt.minLOD() = 1; 297 // Sets shader uniform for terrain renderer (config var defaults to false) 298 mpOpt.enableLighting() = false; 295 299 osgEarth::MapNodeOptions mapNodeOpts(mpOpt); 296 mapNodeOpts.enableLighting() = false; 300 // Sets GL_LIGHTING state in MapNode's StateSet (config var defaults to true) 301 mapNodeOpts.enableLighting() = true; 297 302 osgEarth::MapNode *mapNode = new osgEarth::MapNode(map, mapNodeOpts); 298 303 _mapNode = mapNode; … … 328 333 } 329 334 _needsRedraw = true; 335 } 336 337 void Renderer::setLighting(bool state) 338 { 339 if (_mapNode.valid()) { 340 TRACE("Setting lighting: %d", state ? 1 : 0); 341 _mapNode->getOrCreateStateSet() 342 ->setMode(GL_LIGHTING, state ? 1 : 0); 343 } 344 _needsRedraw = true; 345 } 346 347 void Renderer::setTerrainVerticalScale(double scale) 348 { 349 if (_mapNode.valid()) { 350 _mapNode->getTerrainEngine()->setVerticalScale(scale); 351 } 352 _needsRedraw = true; 353 } 354 355 void Renderer::setTerrainLighting(bool state) 356 { 357 #if 1 358 if (_mapNode.valid()) { 359 // XXX: HACK alert 360 // Find the terrain engine container (might be above one or more decorators) 361 osg::Group *group = _mapNode->getTerrainEngine(); 362 while (group->getParent(0) != NULL && group->getParent(0) != _mapNode.get()) { 363 group = group->getParent(0); 364 } 365 if (group != NULL && group->getParent(0) == _mapNode.get()) { 366 TRACE("Setting terrain lighting: %d", state ? 1 : 0); 367 if (group->getOrCreateStateSet()->getUniform("oe_mode_GL_LIGHTING") != NULL) { 368 group->getStateSet()->getUniform("oe_mode_GL_LIGHTING")->set(state); 369 } else { 370 ERROR("Can't get terrain lighting uniform"); 371 } 372 } else { 373 ERROR("Can't get terrain lighting uniform"); 374 } 375 } 376 #else 377 if (_stateManip.valid()) { 378 _stateManip->setLightingEnabled(state); 379 } 380 #endif 381 _needsRedraw = true; 382 } 383 384 void Renderer::setTerrainWireframe(bool state) 385 { 386 #if 0 387 if (_mapNode.valid()) { 388 TRACE("Setting terrain wireframe: %d", state ? 1 : 0); 389 osg::StateSet *state = _mapNode->getOrCreateStateSet(); 390 osg::PolygonMode *pmode = dynamic_cast< osg::PolygonMode* >(state->getAttribute(osg::StateAttribute::POLYGONMODE)); 391 if (pmode == NULL) { 392 pmode = new osg::PolygonMode; 393 state->setAttribute(pmode); 394 } 395 if (state) { 396 pmode->setMode(osg::PolygonMode::FRONT_AND_BACK, osg::PolygonMode::LINE); 397 } else { 398 pmode->setMode(osg::PolygonMode::FRONT_AND_BACK, osg::PolygonMode::FILL); 399 } 400 } 401 #else 402 if (_stateManip.valid()) { 403 _stateManip->setPolygonMode(state ? osg::PolygonMode::LINE : osg::PolygonMode::FILL); 404 } 405 #endif 406 _needsRedraw = true; 407 } 408 409 void Renderer::setViewpoint(const osgEarth::Viewpoint& v, double durationSecs) 410 { 411 if (_manipulator.valid()) { 412 _manipulator->setViewpoint(v, durationSecs); 413 } 414 _needsRedraw = true; 415 } 416 417 osgEarth::Viewpoint Renderer::getViewpoint() 418 { 419 if (_manipulator.valid()) { 420 return _manipulator->getViewpoint(); 421 } else { 422 // Uninitialized, invalid viewpoint 423 return osgEarth::Viewpoint(); 424 } 330 425 } 331 426 … … 602 697 x, y, (absolute ? 1 : 0)); 603 698 699 // Wants mouse delta x,y in normalized screen coords 604 700 _manipulator->pan(x, y); 605 701 _needsRedraw = true; … … 628 724 // FIXME: zoom here wants y mouse coords in normalized viewport coords 629 725 630 _manipulator->zoom(0, z); 726 //_manipulator->zoom(0, z); 727 728 double dist = _manipulator->getDistance(); 729 dist *= (1.0 + z); 730 _manipulator->setDistance(dist); 731 631 732 _needsRedraw = true; 632 733 }
Note: See TracChangeset
for help on using the changeset viewer.