Show
Ignore:
Timestamp:
06/04/04 10:40:15 (11 years ago)
Author:
robert
Message:

From Ulrich Hertlein & Iskander Prins, added rotation of skydown on
fixed handling of updating one image per frame.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgprerendercubemap/osgprerendercubemap.cpp

    r2233 r3033  
    1212#include <osg/PositionAttitudeTransform> 
    1313 
     14#include <osg/MatrixTransform> 
     15 
    1416#include <osgUtil/RenderToTextureStage> 
    1517#include <osgUtil/Optimizer> 
     18#include <osgUtil/TransformCallback> 
    1619 
    1720#include <osgDB/ReadFile> 
     
    2831#include <vector> 
    2932 
    30  
    31 //#define UPDATE_ONE_IMAGE_PER_FRAME 1 
     33#define UPDATE_ONE_IMAGE_PER_FRAME 1 
    3234 
    3335 
     
    7375        virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) 
    7476        { 
     77            // Reset this counter to zero, otherwise it wont do the while loop down below. 
     78            // And the cubemap will never update the newer frames. 
     79            if (_updateCubemapFace > 5) 
     80                _updateCubemapFace = 0; 
     81 
    7582            osgUtil::CullVisitor* cv = dynamic_cast<osgUtil::CullVisitor*>(nv); 
    7683            if (cv && _cubemap.valid() && _subgraph.valid()) 
     
    95102                { 
    96103                    _clearColor = clearColArray[_updateCubemapFace]; 
    97                     doPreRender(*cv, _updateCubemapFace++); 
     104                    doPreRender(*node, *cv, _updateCubemapFace++); 
    98105                } 
    99106#else 
     
    101108                { 
    102109                    _clearColor = clearColArray[_updateCubemapFace]; 
    103                     doPreRender(*cv, _updateCubemapFace++); 
    104                 } 
     110                    doPreRender(*node, *cv, _updateCubemapFace++); 
     111                }     
    105112#endif 
    106113            } 
    107  
     114                 
    108115            // must traverse the subgraph             
    109116            traverse(node,nv); 
    110117        } 
    111          
    112         void doPreRender(osgUtil::CullVisitor& cv, const int nFace); 
     118            
     119        void doPreRender(osg::Node& node, osgUtil::CullVisitor& cv, const int nFace); 
    113120         
    114121        struct ImageData 
     
    128135 
    129136 
    130 void PrerenderCullCallback::doPreRender(osgUtil::CullVisitor& cv, const int nFace) 
     137void PrerenderCullCallback::doPreRender(osg::Node& /*node*/, osgUtil::CullVisitor& cv, const int nFace) 
    131138{ 
    132139    const ImageData id[] = 
     
    222229    } 
    223230 
    224     int height = 128; 
    225     int width  = 128; 
     231    int height = 512; 
     232    int width  = 512; 
    226233 
    227234    const osg::Viewport& viewport = *cv.getViewport(); 
     
    244251 
    245252    // if one exist attach image to the RenderToTextureStage. 
    246 //  if (_image.valid()) rtts->setImage(_image.get()); 
     253    // if (image.valid()) rtts->setImage(_image.get()); 
    247254    if (image) rtts->setImage(image); 
    248255} 
     
    254261    return new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0.0f,0.0f,0.0f),radius)); 
    255262} 
    256  
    257263 
    258264osg::Node* createPreRenderSubGraph(osg::Node* subgraph) 
     
    447453#if 1 
    448454    osg::Node* sky = osgDB::readNodeFile("skydome.osg"); 
    449     if (sky) 
    450         rootNode->addChild(createPreRenderSubGraph(sky)); 
     455 
     456    // Proof of concept to see if the skydome really rotates and that the cubemap gets updated. 
     457    // create a transform to spin the model. 
     458     
     459    osg::MatrixTransform* loadedModelTransform = new osg::MatrixTransform; 
     460    loadedModelTransform->addChild(sky); 
     461 
     462    osg::NodeCallback* nc = new osgUtil::TransformCallback(loadedModelTransform->getBound().center(),osg::Vec3(0.0f,0.0f,1.0f),osg::inDegrees(5.0f)); 
     463    loadedModelTransform->setUpdateCallback(nc); 
     464 
     465    // osg::Group* rootNode = new osg::Group(); 
     466    // rootNode->addChild(loadedModelTransform); 
     467    // rootNode->addChild(createPreRenderSubGraph(loadedModelTransform)); 
     468 
     469 
     470    if (loadedModelTransform) 
     471    {     
     472        rootNode->addChild(createPreRenderSubGraph(loadedModelTransform)); 
     473    } 
    451474#endif 
    452475 
     
    457480    rootNode->addChild(pat); 
    458481#endif 
     482 
    459483    // load the nodes from the commandline arguments. 
    460484    osg::Node* loadedModel = osgDB::readNodeFiles(arguments); 
     
    462486        rootNode->addChild(loadedModel); 
    463487 
    464  
    465488    // add model to the viewer. 
    466489    viewer.setSceneData( rootNode ); 
    467  
    468490 
    469491    // create the windows and run the threads.