hybr wrote: > Hi, Almir > > Try following thing: > Look at material name which uses this texture in 3ds max, in osg this will be > the name of drawable with stateset that uses this texture. You can find this > drawable with some visitor, get stateset there, then set your animated > texture to texture unit where old texture is (if there are one texture in > material it's 0 by default). > > Cheers, > Sergey. > > 15.02.2011, 04:24, "Almir Brazil" <>: > > > Hi, > > > > I'm new to OpenSceneGraph, and I have the following scenario: > > > > A OSG file exported from 3DS Max, using OSGExp0.9.8.... > > That file has 3 textures... 2 should be static, and 1 should be animated. > > When playing the exported OSG file, all 3 textures still static. > > > > I read few things about osg imagesequence, that can read a lot of > > sequential images to produce a animated texture effect. And that's what I'm > > looking for!! > > > > My dificultie is to change (in code) the static texture exported from > > 3DSMax to a imagesequence texture. > > > > Can anyone say me how to do that? > > > > ... > > > > Thank you! > > > > Cheers, > > Almir > > > > ------------------ > > Read this topic online here: > > http://forum.openscenegraph.org/viewtopic.php?p=36665#36665 > > > > _______________________________________________ > > osg-users mailing list > > > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > _______________________________________________ > osg-users mailing list > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > ------------------ > Post generated by Mail2Forum
Ok, here is the code... It's a modified version of osgartsimple.cpp: (see attachment) The OSG file - karsten.osg - (generated with 3ds Max) has 3 main textures. I want to change one of them with a imagesequence or movie file (quicktime .mov) (I have both of them). I haven't a Geode object, only a VideoGeode... how can I create a stateset to change the texture? Thanks! ------------------ Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=36711#36711
/* -*-c++-*- * * osgART - ARToolKit for OpenSceneGraph * Copyright (C) 2005-2008 Human Interface Technology Laboratory New Zealand * * This file is part of osgART 2.0 * * osgART 2.0 is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * osgART 2.0 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with osgART 2.0. If not, see <http://www.gnu.org/licenses/>. * */ #include <osgART/Foundation> #include <osgART/VideoLayer> #include <osgART/PluginManager> #include <osgART/VideoGeode> #include <osgART/Utils> #include <osgART/GeometryUtils> #include <osgART/MarkerCallback> #include <osgART/TransformFilterCallback> #include <osgViewer/Viewer> #include <osgViewer/ViewerEventHandlers> #include <osgDB/FileUtils> #include <osgDB/WriteFile> #include <osgDB/ReadFile> #include <osgDB/FileNameUtils> #include <osgDB/Registry> osg::Group* createImageBackground(osg::Image* video) { osgART::VideoLayer* _layer = new osgART::VideoLayer(); _layer->setSize(*video); osgART::VideoGeode* _geode = new osgART::VideoGeode(osgART::VideoGeode::USE_TEXTURE_2D, video); addTexturedQuad(*_geode,video->s(),video->t()); _layer->addChild(_geode); return _layer; } int main(int argc, char* argv[]) { // create a root node osg::ref_ptr<osg::Group> root = new osg::Group; osgViewer::Viewer viewer; // attach root node to the viewer viewer.setSceneData(root.get()); // add relevant handlers to the viewer viewer.addEventHandler(new osgViewer::StatsHandler); viewer.addEventHandler(new osgViewer::WindowSizeHandler); viewer.addEventHandler(new osgViewer::ThreadingHandler); viewer.addEventHandler(new osgViewer::HelpHandler); // preload the video and tracker int _video_id = osgART::PluginManager::instance()->load("osgart_video_artoolkit2"); int _tracker_id = osgART::PluginManager::instance()->load("osgart_tracker_artoolkit2"); // Load a video plugin. osg::ref_ptr<osgART::Video> video = dynamic_cast<osgART::Video*>(osgART::PluginManager::instance()->get(_video_id)); // check if an instance of the video stream could be started if (!video.valid()) { // Without video an AR application can not work. Quit if none found. osg::notify(osg::FATAL) << "Could not initialize video plugin!" << std::endl; exit(-1); } // Open the video. This will not yet start the video stream but will // get information about the format of the video which is essential // for the connected tracker video->open(); osg::ref_ptr<osgART::Tracker> tracker = dynamic_cast<osgART::Tracker*>(osgART::PluginManager::instance()->get(_tracker_id)); if (!tracker.valid()) { // Without tracker an AR application can not work. Quit if none found. osg::notify(osg::FATAL) << "Could not initialize tracker plugin!" << std::endl; exit(-1); } // get the tracker calibration object osg::ref_ptr<osgART::Calibration> calibration = tracker->getOrCreateCalibration(); // load a calibration file if (!calibration->load(std::string("data/camera_para.dat"))) { // the calibration file was non-existing or couldnt be loaded osg::notify(osg::FATAL) << "Non existing or incompatible calibration file" << std::endl; exit(-1); } // set the image source for the tracker tracker->setImage(video.get()); osgART::TrackerCallback::addOrSet(root.get(), tracker.get()); osg::ref_ptr<osgART::Marker> markerA = tracker->addMarker("single;karsten_a.patt;70;0;0"); if (!markerA.valid()) { // Without marker an AR application can not work. Quit if none found. osg::notify(osg::FATAL) << "Could not add marker!" << std::endl; exit(-1); } markerA->setActive(true); osg::ref_ptr<osg::MatrixTransform> arTransformA = new osg::MatrixTransform(); osgART::attachDefaultEventCallbacks(arTransformA.get(), markerA.get()); arTransformA->addChild(osgDB::readNodeFile("karsten.osg")); arTransformA->getOrCreateStateSet()->setRenderBinDetails(100, "RenderBin"); osg::ref_ptr<osg::Group> videoBackground = createImageBackground(video.get()); videoBackground->getOrCreateStateSet()->setRenderBinDetails(0, "RenderBin"); osg::ref_ptr<osg::Camera> cam = calibration->createCamera(); cam->addChild(arTransformA.get()); cam->addChild(videoBackground.get()); root->addChild(cam.get()); video->start(); return viewer.run(); }
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

