Improvements to the handling of warp pointer call on start up.

This commit is contained in:
Robert Osfield 2003-04-05 07:19:40 +00:00
parent c6e3cb044b
commit cac6642de5
3 changed files with 14 additions and 26 deletions

View File

@ -52,7 +52,7 @@ void GliderManipulator::home(const GUIEventAdapter& ea,GUIActionAdapter& us)
us.requestRedraw();
us.requestWarpPointer((ea.getXmin()+ea.getXmax())/2,(ea.getYmin()+ea.getYmax())/2);
us.requestWarpPointer((ea.getXmin()+ea.getXmax())/2.0f,(ea.getYmin()+ea.getYmax())/2.0f);
flushMouseEventStack();
@ -70,7 +70,10 @@ void GliderManipulator::init(const GUIEventAdapter& ea,GUIActionAdapter& us)
const osg::BoundingSphere& boundingSphere=_node->getBound();
_velocity = boundingSphere._radius*0.01f;
us.requestWarpPointer((ea.getXmin()+ea.getXmax())/2,(ea.getYmin()+ea.getYmax())/2);
if (ea.getEventType()!=GUIEventAdapter::RESIZE)
{
us.requestWarpPointer((ea.getXmin()+ea.getXmax())/2.0f,(ea.getYmin()+ea.getYmax())/2.0f);
}
}
@ -207,18 +210,15 @@ bool GliderManipulator::calcMovement()
}
float mx = (_ga_t0->getXmin()+_ga_t0->getXmax())/2.0f;
float my = (_ga_t0->getYmin()+_ga_t0->getYmax())/2.0f;
float dx = _ga_t0->getX()-mx;
float dy = _ga_t0->getY()-my;
float dx = _ga_t0->getXnormalized();
float dy = _ga_t0->getYnormalized();
osg::Vec3 center = _camera->getEyePoint();
osg::Vec3 sv = _camera->getSideVector();
osg::Vec3 lv = _camera->getLookVector();
float pitch = inDegrees(dy*0.15f*dt);
float roll = inDegrees(dx*0.1f*dt);
float pitch = inDegrees(dy*70.0f*dt);
float roll = inDegrees(dx*60.0f*dt);
osg::Matrix mat;
mat.makeTranslate(-center);

View File

@ -76,9 +76,10 @@ class OSGPRODUCER_EXPORT KeyboardMouseCallback : public Producer::KeyboardMouseC
Producer::KeyboardMouse* getKeyboardMouse() { return _keyboardMouse; }
const Producer::KeyboardMouse* getKeyboardMouse() const { return _keyboardMouse; }
EventAdapter* createEventAdapter();
protected:
EventAdapter* createEventAdapter();
Producer::KeyboardMouse* _keyboardMouse;
float _mx, _my;

View File

@ -132,8 +132,8 @@ void Viewer::setUpViewer(unsigned int options)
_old_style_osg_camera = new osg::Camera;
if (options&TRACKBALL_MANIPULATOR) addCameraManipulator(new osgGA::TrackballManipulator);
if (options&FLIGHT_MANIPULATOR) addCameraManipulator(new osgGA::FlightManipulator);
if (options&DRIVE_MANIPULATOR) addCameraManipulator(new osgGA::DriveManipulator);
if (options&FLIGHT_MANIPULATOR) addCameraManipulator(new osgGA::FlightManipulator);
if (options&STATE_MANIPULATOR)
{
@ -141,20 +141,7 @@ void Viewer::setUpViewer(unsigned int options)
statesetManipulator->setStateSet(getGlobalStateSet());
_eventHandlerList.push_back(statesetManipulator.get());
}
// if (options&STATS_MANIPULATOR)
// {
// // register the drawing of stats to pipe 0.
// FrameStatsHandler* fsh = new FrameStatsHandler;
// setStatsHandler(fsh);
// getCamera(0)->addPostDrawCallback(fsh);
//
// // register the event handler for stats.
// getEventHandlerList().push_back(new StatsEventHandler(this));
//
//
// }
if (options&VIEWER_MANIPULATOR)
{
getEventHandlerList().push_back(new ViewerEventHandler(this));
@ -192,7 +179,7 @@ void Viewer::realize( ThreadingModel thread_model)
if (_keyswitchManipulator.valid() && _keyswitchManipulator->getCurrentCameraManipulator())
{
osg::ref_ptr<osgProducer::EventAdapter> init_event = new osgProducer::EventAdapter;
osg::ref_ptr<osgProducer::EventAdapter> init_event = _kbmcb->createEventAdapter();
init_event->adaptFrame(0.0);
_keyswitchManipulator->setCamera(_old_style_osg_camera.get());