[osg-users] Arcball Camera without unexpecting 'roll' of the camera

Daniel Neos daniel.rd at hotmail.de
Tue May 17 05:35:23 PDT 2016


Unfortunalety there is no feature "throw" feature. My class inherits from osgGA::GUIEventHandler and there is no setAllowThrow implemented, as far as I know.

Here is (part of) my actual mouse dragging code:


Code:


bool CameraHandler::handle(const osgGA::GUIEventAdapter & ea, osgGA::GUIActionAdapter & us)
{
                osgViewer::View* viewer = dynamic_cast<osgViewer::View*>(&us);
                osg::Matrixd viewMatrix = viewer->getCamera()->getViewMatrix();
                osg::Vec3d translation = viewMatrix.getTrans();

                osg::Matrixd rotationX = osg::Matrix::rotate(deltaX  * 0.5, osg::Y_AXIS);
                osg::Matrixd rotationY = osg::Matrix::rotate(-deltaY * 0.5, osg::X_AXIS);
                osg::Matrixd preTrans = osg::Matrix::identity();
                osg::Matrixd postTrans = osg::Matrix::identity();

                osg::Vec3d bsCenter = osg::Vec3d(137.69, 284.17, 3305.0); // scene is (almost) static
                m_rotationPoint = osg::Vec3(0.0, 0.0 , 0.0); // good rotation point for 
                
                m_rotationPoint = translation - bsCenter; // good rotation point for 

                preTrans.setTrans(-m_rotationPoint);
                postTrans.setTrans(m_rotationPoint);
                
                viewMatrix = viewMatrix * (preTrans * rotationX * rotationY * postTrans);
                viewer->getCamera()->setViewMatrix(viewMatrix);
                
                // ensure fixed point to look at
                osg::Vec3d eye, center, up;
                viewer->getCamera()->getViewMatrixAsLookAt(eye, center, up);
                if (focusPointFlag)
                {
                    viewer->getCamera()->setViewMatrixAsLookAt(eye, bsCenter , up);
                }

                return true;
}





And if I am zooming in, sometimes the effect gets worse and the camera is hardly to control. Maybe there is an error in my rotation setup?

Thank you!

Cheers
Daniel Neos


cbuchner1 wrote:
> Could it be that the "throw" feature of the camera manipulator is responsible for the roll?
> 
> If so, try disabling it.
> 
> 
> Also, post source code if you want specific help with a specific issue in your implementation.
> 
> 
> Christian
> 
> 
> 
> 



Code:




------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=67128#67128








More information about the osg-users mailing list