Advertisement
Guest User

move Flt UV

a guest
Sep 23rd, 2019
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.24 KB | None | 0 0
  1. struct MoveUVCallback : public osg::Drawable::UpdateCallback
  2. {
  3.     virtual void update(osg::NodeVisitor*, osg::Drawable* drawable)
  4.     {
  5.         if (drawable->asGeometry())
  6.         {
  7.             osg::ref_ptr<osg::Geometry> geometry = drawable->asGeometry();
  8.  
  9.             osg::ref_ptr<osg::Vec2Array> uvs = dynamic_cast<osg::Vec2Array*>(geometry->getTexCoordArray(0));
  10.             if (uvs.valid())
  11.             {
  12.  
  13.                 for (size_t i = 0; i < uvs->size(); ++i)
  14.                 {
  15.                     osg::Vec2& uv = uvs->at(i);
  16.                     uv.x() += 0.01;
  17.                     uv.y() += 0.01;
  18.                 }
  19.  
  20.                 uvs->dirty();
  21.                 geometry->dirtyDisplayList();
  22.             }
  23.             else
  24.             {
  25.                 std::cout << "Non valid UVs" << std::endl;
  26.             }
  27.         }
  28.     }
  29. };
  30.  
  31. struct FindGeometryVisitor : public osg::NodeVisitor
  32. {
  33.     FindGeometryVisitor()
  34.         : osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN)
  35.     {
  36.     }
  37.  
  38.     virtual void apply(osg::Node& node)
  39.     {
  40.         if (node.asGeode())
  41.         {
  42.             for (size_t i = 0; i < node.asGeode()->getNumDrawables(); ++i)
  43.             {
  44.                 osg::ref_ptr<osg::Geometry> geometry = node.asGeode()->getDrawable(i)->asGeometry();
  45.                 if (geometry.valid())
  46.                 {
  47.                     geometry->setUpdateCallback(new MoveUVCallback);
  48.  
  49.                     osg::ref_ptr<osg::Texture2D> texture = dynamic_cast<osg::Texture2D*>(geometry->getOrCreateStateSet()->getTextureAttribute(0, osg::StateAttribute::TEXTURE));
  50.                     if (texture.valid())
  51.                     {
  52.                         std::cout << "Valid texture" << std::endl;
  53.  
  54.                         texture->setWrap(osg::Texture2D::WRAP_S, osg::Texture2D::REPEAT);
  55.                         texture->setWrap(osg::Texture2D::WRAP_T, osg::Texture2D::REPEAT);
  56.                         texture->setWrap(osg::Texture2D::WRAP_R, osg::Texture2D::REPEAT);
  57.                     }
  58.                 }
  59.             }
  60.         }
  61.         traverse(node);
  62.     }
  63. };
  64.  
  65.  
  66. .......
  67.  
  68. osg::ref_ptr<osg::Node> loadedModel =  osgDB::readRefNodeFiles(arguments);
  69.    
  70.     FindGeometryVisitor nv;
  71.     loadedModel->accept(nv);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement