I think I'm running into a bug in OSG. I've implemented my own versions of mouse events in a sub-classed osgQt::GLWidget so I can redraw the 3D view only when necessary:
void Osg3dViewCM::mousePressEvent(QMouseEvent* event)
{
m_mouseDown = true;
if (_cameraManipulator.valid())
{
osgQt::GLWidget::mousePressEvent(event);
frame();
}
}
void Osg3dViewCM::mouseReleaseEvent(QMouseEvent* event)
{
m_mouseDown = false;
if (_cameraManipulator.valid())
{
osgQt::GLWidget::mouseReleaseEvent(event);
frame();
}
emit cameraChanged(_cameraManipulator->getInverseMatrix());
}
void Osg3dViewCM::mouseMoveEvent(QMouseEvent* event)
{
if (_cameraManipulator.valid() && m_mouseDown)
{
osgQt::GLWidget::mouseMoveEvent(event);
frame();
}
}
void Osg3dViewCM::wheelEvent(QWheelEvent *event)
{
if (_cameraManipulator.valid())
{
osgQt::GLWidget::wheelEvent(event);
frame();
}
}
I'm using a default osgEarth::Util::EarthManipulator and clicking and dragging on the view updates it without an issue rotating or panning properly. For some reason, when I scroll the wheel, the frame function doesn't update the view. If I click on the view after scrolling, it gets updated with the zoom operation applied. Am I missing something?