Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct MoveUVCallback : public osg::Drawable::UpdateCallback
- {
- virtual void update(osg::NodeVisitor*, osg::Drawable* drawable)
- {
- if (drawable->asGeometry())
- {
- osg::ref_ptr<osg::Geometry> geometry = drawable->asGeometry();
- osg::ref_ptr<osg::Vec2Array> uvs = dynamic_cast<osg::Vec2Array*>(geometry->getTexCoordArray(0));
- if (uvs.valid())
- {
- for (size_t i = 0; i < uvs->size(); ++i)
- {
- osg::Vec2& uv = uvs->at(i);
- uv.x() += 0.01;
- uv.y() += 0.01;
- }
- uvs->dirty();
- geometry->dirtyDisplayList();
- }
- else
- {
- std::cout << "Non valid UVs" << std::endl;
- }
- }
- }
- };
- struct FindGeometryVisitor : public osg::NodeVisitor
- {
- FindGeometryVisitor()
- : osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN)
- {
- }
- virtual void apply(osg::Node& node)
- {
- if (node.asGeode())
- {
- for (size_t i = 0; i < node.asGeode()->getNumDrawables(); ++i)
- {
- osg::ref_ptr<osg::Geometry> geometry = node.asGeode()->getDrawable(i)->asGeometry();
- if (geometry.valid())
- {
- geometry->setUpdateCallback(new MoveUVCallback);
- osg::ref_ptr<osg::Texture2D> texture = dynamic_cast<osg::Texture2D*>(geometry->getOrCreateStateSet()->getTextureAttribute(0, osg::StateAttribute::TEXTURE));
- if (texture.valid())
- {
- std::cout << "Valid texture" << std::endl;
- texture->setWrap(osg::Texture2D::WRAP_S, osg::Texture2D::REPEAT);
- texture->setWrap(osg::Texture2D::WRAP_T, osg::Texture2D::REPEAT);
- texture->setWrap(osg::Texture2D::WRAP_R, osg::Texture2D::REPEAT);
- }
- }
- }
- }
- traverse(node);
- }
- };
- .......
- osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments);
- FindGeometryVisitor nv;
- loadedModel->accept(nv);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement