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

Reply via email to