OSG's Trackball manipulator (and other core OSG manipulators) set the modelview matrix so that +Z is up. If you'd like to use +Y up, you'll need to derive a new manipulator.

BTW, I think this is covered in the online FAQ as well as the Quick Start Guide.
   -Paul

On May 30, 2008, at 8:21 AM, Poirier, Guillaume wrote:

Hello,

I am trying to represent a trackball view with a cube, with each face of the cube labelled "front", "top", "right", etc. I'd like the cube to be positioned in the window corner and follow the trackball view. I assume that the initial home position corresponds to the front view. Now I've been playing with this for
a while and I am getting confused with transformations :(

I create the cube as follows:

m_pFaceFront = osg::createTexturedQuadGeometry(osg::Vec3(-0.5, -0.5, -0.5),osg::Vec3(1,0,0),osg::Vec3(0,0,1)); m_pFaceBack = osg::createTexturedQuadGeometry(osg::Vec3(0.5, 0.5, -0.5),osg::Vec3(-1,0,0),osg::Vec3(0,0,1)); m_pFaceLeft = osg::createTexturedQuadGeometry(osg::Vec3(-0.5, 0.5, -0.5),osg::Vec3(0,-1,0),osg::Vec3(0,0,1)); m_pFaceRight = osg::createTexturedQuadGeometry(osg::Vec3(0.5, -0.5, -0.5),osg::Vec3(0,1,0),osg::Vec3(0,0,1)); m_pFaceTop = osg::createTexturedQuadGeometry(osg::Vec3(-0.5, -0.5, 0.5),osg::Vec3(1,0,0),osg::Vec3(0,1,0)); m_pFaceBottom = osg::createTexturedQuadGeometry(osg::Vec3(-0.5, 0.5, -0.5),osg::Vec3(1,0,0),osg::Vec3(0,-1,0));

So I believe that the "front" is facing -Y, "top" +Z, and "right" +X.

I place the cube under a camera with absolute reference frame and set the view to identity. I am thinking the view frame has +X to the right, +Y up, and +Z out of the screen. What I see is the bottom face upside down. I would have expected to see the top face so I am not entirely sure what is going on...

My second question is how to make the cube follow the trackball view. The cube has a matrix transform as a parent
and I set its rotation in an update callback as follows:

osg::Matrixd invMat;
invMat = m_pViewCube->GetView()->getCameraManipulator()- >getInverseMatrix();
osg::Matrixd rotMat;
rotMat.setRotate(invMat.getRotate());
m_pViewCube->GetTransform()->setMatrix(rotMat);

The cube rotation is "inverted" wrt to the trackball when using the inverse matrix. Using the manipulator matrix instead of its inverse, the cube follows correctly on drag vertically but has the wrong rotation axis on drag horizontally...

Any help with this would be greatly appreciated !


bill

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to