Changeset 71


Ignore:
Timestamp:
Dec 20, 2004, 5:33:36 PM (20 years ago)
Author:
darran
Message:
  • moving light is nearly functional
  • bad paradigm though, better to have a view from this light position as an inset.
Location:
Swollen/swollen
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • Swollen/swollen/keyboardeventhandler.cpp

    r68 r71  
    1414    _prevtime = 0;
    1515    _togglewireframe = false;
     16    _togglemanipulatormode = false;
    1617}
    1718
     
    7576                handled = true;
    7677                break;
     78
     79            case 'm':
     80                _togglemanipulatormode = true;
     81                handled = true;
     82                break;
     83
    7784            }
    7885
     
    119126
    120127
     128bool KeyboardEventHandler::toggleManipulatorMode()
     129{
     130    if( _togglemanipulatormode )
     131    {
     132        _togglemanipulatormode = false;
     133        return true;
     134    }
     135    return false;
     136}
     137
     138
  • Swollen/swollen/keyboardeventhandler.h

    r66 r71  
    2323    virtual bool timestepChanged();
    2424    virtual bool toggleWireframe();
     25    virtual bool toggleManipulatorMode();
    2526    virtual int getTimestep(){return (unsigned int) _timestep;}
    2627    virtual void setTime(float time);
     
    2930    int _direction, _timestep, _ntimesteps;
    3031    float _tps, _prevtime, _tpsorig;
    31     bool _paused, _timestepchanged, _togglewireframe;
     32    bool _paused, _timestepchanged, _togglewireframe, _togglemanipulatormode;
    3233};
    3334
  • Swollen/swollen/main.cpp

    r70 r71  
    136136    // Lighting
    137137    SpotLight* spotlight = new SpotLight(rootStateSet);
    138     spotlight->setPosition( osg::Vec3(1,0,1) );  // z is up
     138    spotlight->setPosition( osg::Vec3(0,1,0) );  // z is up
    139139    spotlight->setSpotAngle( 45.0 );
    140140
     
    181181    // initial camera position
    182182    CustomTrackballManipulator* trackball = viewer.getTrackball();
    183     viewer.getTrackball()->setNode( rootnode );
    184     viewer.getTrackball()->setAutoComputeHomePosition( false );
    185     viewer.getTrackball()->setHomePosition(
     183    trackball->setNode( model );
     184    trackball->setAutoComputeHomePosition( false );
     185    trackball->setHomePosition(
     186        osg::Vec3d(0,1,0),    // location
     187        osg::Vec3d(0,0,0),     // target
     188        osg::Vec3d(0,0,1) );   // up vector
     189    trackball->moveToHome();
     190    trackball->disable();
     191
     192
     193    CustomTerrainManipulator* terrainmanipulator = viewer.getTerrainManipulator();
     194    terrainmanipulator->setNode( rootnode );
     195    terrainmanipulator->setAutoComputeHomePosition( false );
     196    terrainmanipulator->setHomePosition(
    186197        osg::Vec3d(0,-3,0),    // camera location
    187198        osg::Vec3d(0,0,0),     // camera target
    188199        osg::Vec3d(0,0,1) );   // camera up vector
    189     viewer.getTrackball()->moveToHome();
    190     viewer.getTrackball()->disable();
    191 
    192 
    193     viewer.getTerrainManipulator()->setNode( rootnode );
    194     viewer.getTerrainManipulator()->setAutoComputeHomePosition( false );
    195     viewer.getTerrainManipulator()->setHomePosition(
    196         osg::Vec3d(0,-3,0),    // camera location
    197         osg::Vec3d(0,0,0),     // camera target
    198         osg::Vec3d(0,0,1) );   // camera up vector
    199     viewer.getTerrainManipulator()->moveToHome();
    200     viewer.getTerrainManipulator()->enable();
     200    terrainmanipulator->moveToHome();
     201    terrainmanipulator->enable();
    201202
    202203
     
    204205    while( !viewer.done() )
    205206    {
     207   
    206208        // wait for all cull and draw threads to complete.
    207209        viewer.sync();
     
    220222
    221223        // light position manipulator
    222         if( viewer.getTrackball()->isEnabled() )
     224        if( trackball->isEnabled() )
    223225        {
    224            osg::Matrixd matrix = trackball->getInverseMatrix();
    225            //std::cout << matrix << std::endl;
     226            //osg::Matrixd matrix = trackball->getInverseMatrix();
     227           osg::Matrixd matrix = trackball->getMatrix();
     228           osg::Vec3d position = matrix.getTrans();
     229           //std::cout << "trackball position x: " << position. << std::endl;
     230           spotlight->setPosition( position );
    226231        }
     232
    227233
    228234        // events
     
    230236            water->toggleWireframe();
    231237
    232         // update the scene by traversing with the update visitor
     238        // click-mouse movement can change either camera view or scene light position
     239        if( event_handler->toggleManipulatorMode() )
     240        {
     241            if( trackball->isEnabled() )
     242            {
     243                trackball->disable();
     244                terrainmanipulator->enable();
     245            }
     246            else
     247            {
     248                trackball->enable();
     249                terrainmanipulator->disable();
     250            }
     251        }
     252       
     253
     254       // update the scene by traversing with the update visitor
    233255        viewer.update();
    234256         
  • Swollen/swollen/version.cpp

    r70 r71  
    1 const char* version() { const char* s = "Revision: 69M"; return s; }
     1const char* version() { const char* s = "Revision: 70M"; return s; }
Note: See TracChangeset for help on using the changeset viewer.