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
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to