I am trying to find out what is the screen cordinates corresponding to the
world cordinates of a moving node.
I read the post: http://forum.openscenegraph.org/viewtopic.php?t=2292
and referred to OSG beginners guide also.
So, I did the following:-
//set viewport of viewer for screensize 1280X768
viewer.getCamera()->setViewport( new osg::Viewport(0, 0, 1280, 768) );
//Setup the viewer position used to position the camera in simulation loop
osg::Vec3d cam_eye( 0., -50.0, 0.0);
osg::Vec3d cam_center( 0.,-40.0, 0.0 );
osg::Vec3d cam_up( 0.0, 0.0,1.0 );
//compute the camera matrix using modelview*ProjectionMat*windowMat
osg::Matrix mv = viewer.getCamera()->getViewMatrix();
osg::Matrix windowMatrix =
osg::Matrix projectionMatrix = viewer.getCamera()->getProjectionMatrix();
//get the camera matrix
osg::Matrix cameraMatrix = mv* projectionMatrix * windowMatrix;
//Now make a moving node in the scene that moves in steps of delta in every
float delta = 0.;
viewer.getCamera()->setViewMatrixAsLookAt( cam_eye, cam_center,
1280.0/768.0, 0.1f, 80.0f);
//I translate the model in x -direction everyframe and get its world cordinate
osg::Vec3 posInWorld = model->getBound().center()
//compute the screen coordinates of model
osg::Vec3d ssc = posInWorld*cameraMatrix;
delta+=2; //increment the position of model
I have checked that [0 , 0, 0] vector in WCS is mapped to ssc = [0, 0,
0]*cameraMatrix which gives ssc= [640, 384, 0.984]. Neglecting the z-cordinate,
it is same as center of the screen.
My question is: Upon printing the 3 dimensional vector 'ssc' (screen-space
cordinate), i am getting some values of its x-cordinate larger than 1268 (the
viewport dimension!). This happens even when the moving 'model' is still well
within the screen.
For example the WCS point [18, 0, 0] gives ssc as = [1348.92, 384, 0.984]
Where i have gone wrong in computing the screen cordinates? Shouldn't the
screen cordinates be lying in range 0<x<1268 and 0<y<768 ?
I want to find out when the image of the moving node on the screen moves out of
Read this topic online here:
osg-users mailing list