[osg-users] Problem converting yaw,pitch,roll to quaternion

Glenn Waldron gwaldron at gmail.com
Thu Sep 3 12:08:52 PDT 2015


Try this:

https://github.com/gwaldron/osgearth/blob/master/src/applications/osgearth_transform/osgearth_transform.cpp#L77

Good luck.

Glenn Waldron

On Thu, Sep 3, 2015 at 11:09 AM, Guido Knapen <guidoknapen at gmail.com> wrote:

> Hello everybody.
>
> I'm new to this forum. For 16 hours I've been trying to solve my problem
> with no success. I've tried several different methods to convert but all
> fail.
>
> Basicly I have this code to put some testing arrows in my scene which
> demonstrate yaw, pitch and roll.
>
>
> Code:
>
> for(int y = 0; y < 4; y++) // Vertical stuff
>       {
>           char *ID = 0;
>           float lat = 50.0 - 0.1f * y;
>           bool increaseYaw = false;
>           bool increasePitch = false;
>           bool increaseRoll = false;
>
>           switch(y)
>           {
>           case 0:
>                   increaseYaw = true;
>                   ID = "YAW";
>                   break;
>           case 1:
>                   increasePitch = true;
>                   ID = "PITCH";
>                   break;
>           case 2:
>                   increaseRoll = true;
>                   ID = "ROLL";
>                   break;
>           case 3:
>                   increaseYaw = true;
>                   increasePitch = true;
>                   ID = "YAW AND PITCH";
>                   break;
>           case 4:
>                   increaseYaw = true;
>                   increaseRoll = true;
>                   ID = "YAW AND ROLL";
>                   break;
>           case 5:
>                   increasePitch = true;
>                   increaseRoll = true;
>                   ID = "PITCH AND ROLL";
>                   break;
>           case 6:
>                   increaseYaw = true;
>                   increasePitch = true;
>                   increaseRoll = true;
>                   ID = "YAW, PITCH AND ROLL";
>                   break;
>           }
>
>           float yaw = 0.0f;
>               float pitch = 0.0f;
>                   float roll = 0.0f;
>
>                   for(int x = 0; x < 8; x++) // Horizontal stuff
>                   {
>                           float lon = 6.0f + 0.1f * x;
>
>                           GuiLibViewerEntity *ve =
> mViewer->createViewerEntity( // align
>                                ID,// align
>                                GuiLib::GuiLibPosition(lat, lon, 1000.0),
> // align
>                                20.0, // align
>                                path, // align
>                                x == 0);
>                       ve->setRotationRadians(yaw, pitch, roll);
>                       ve->setAutoScale(mAutoScale);
>
>                           if(increaseYaw)
>                           {
>                                   yaw += osg::PI / 4;
>                           }
>
>                           if(increasePitch)
>                           {
>                                   pitch += osg::PI / 4;
>                           }
>
>                           if(increaseRoll)
>                           {
>                                   roll += osg::PI / 4;
>                           }
>                   }
>       }
>
>
>
>
> However my setRotationRadius does not work properly. One of methods which
> got me the closest to the proper result is this one:
>
>
> Code:
>
> void ViewerEntity::setRotationRadians(
>          float aYaw,
>          float aPitch,
>          float aRoll) {
>
> osg::Matrixd mat;
>            mat.makeRotate(aPitch, PITCH_VEC, aYaw, YAW_VEC, aRoll,
> ROLL_VEC);
>
>            mModel->setLocalRotation (mat.getRotate());
> }
>
>
>
>
> Which generates this:
> /file/d/0B7qBNqPzsL5PMWx1ZjVRR0VHbms/view?usp=sharing
>
> EDIT: apparently I cant post images. however that's a google drive image
> feel free to add that to the google drive url.
>
> As you can see the yaw, pitch and roll individually are rotated correctly.
> However when the yaw and pitch are combined the arrows which have a red
> circle around them have their yaw wrong by 180 degrees.
>
> Can anybody please help me out?
>
> Thanks in advance
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=65014#65014
>
>
>
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20150903/d93bbc39/attachment-0002.htm>


More information about the osg-users mailing list