Changeset 12780 for OpenSceneGraph/trunk/examples/osgshadow/osgshadow.cpp
- Timestamp:
- 09/06/11 16:13:13 (21 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/examples/osgshadow/osgshadow.cpp
r12779 r12780 46 46 #include <osgShadow/ViewDependentShadowMap> 47 47 48 #include <osgUtil/Optimizer> 49 48 50 #include <osgDB/ReadFile> 49 51 #include <osgDB/WriteFile> … … 585 587 namespace ModelFive 586 588 { 589 struct UseVBOVisitor : public osg::NodeVisitor 590 { 591 UseVBOVisitor(): 592 osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN) {} 593 594 virtual void apply(osg::Geode& geode) 595 { 596 for(unsigned int i=0; i<geode.getNumDrawables(); ++i) 597 { 598 osg::Geometry* geometry = dynamic_cast<osg::Geometry*>(geode.getDrawable(i)); 599 if (geometry) 600 { 601 OSG_NOTICE<<"geometry->setUseVertexBufferObjects(true);"<<std::endl; 602 geometry->setUseVertexBufferObjects(true); 603 } 604 } 605 } 606 }; 607 608 587 609 osg::AnimationPathCallback* createAnimationPathCallback( float radius, float time ) 588 610 { … … 608 630 osg::Group* createModel(osg::ArgumentParser& arguments) 609 631 { 610 unsigned int rcvShadowMask = 0x1;611 unsigned int castShadowMask = 0x2;612 613 632 // Set the ground (only receives shadow) 614 633 osg::ref_ptr<osg::MatrixTransform> groundNode = new osg::MatrixTransform; 615 634 groundNode->addChild( osgDB::readNodeFile("lz.osg") ); 616 635 groundNode->setMatrix( osg::Matrix::translate(200.0f, 200.0f,-200.0f) ); 617 //groundNode->setNodeMask( rcvShadowMask );636 groundNode->setNodeMask( ReceivesShadowTraversalMask ); 618 637 619 638 // Set the cessna (only casts shadow) … … 621 640 cessnaNode->addChild( osgDB::readNodeFile("cessna.osg.0,0,90.rot") ); 622 641 cessnaNode->addUpdateCallback( createAnimationPathCallback(50.0f, 6.0f) ); 623 //cessnaNode->setNodeMask( castShadowMask );642 cessnaNode->setNodeMask( CastsShadowTraversalMask ); 624 643 625 644 osg::ref_ptr<osg::Group> shadowRoot = new osg::Group; … … 635 654 } 636 655 } 656 657 // cessna is really poorly optimized so fix this by optimizing the mesh and use VBO's. 658 osgUtil::Optimizer optimizer; 659 optimizer.optimize(shadowRoot.get(), osgUtil::Optimizer::INDEX_MESH | 660 osgUtil::Optimizer::VERTEX_POSTTRANSFORM | 661 osgUtil::Optimizer::VERTEX_PRETRANSFORM); 662 663 UseVBOVisitor useVBOVisitor; 664 shadowRoot->accept(useVBOVisitor); 637 665 638 666 return shadowRoot.release();
