osg::Vec3d TrackballRotate::screen2World(osg::Vec3 screenPoint)//将屏幕坐标转换到世界坐标
{
osg::Vec3d vec3;
osg::ref_ptr<osg::Camera> camera = viewer->getCamera();
//osg::Vec3d vScreen(x,y, 0);
osg::Matrix mVPW = camera->getViewMatrix() * camera->getProjectionMatrix() * camera->getViewport()->computeWindowMatrix();
osg::Matrix invertVPW;
invertVPW.invert(mVPW);
vec3 = screenPoint * invertVPW;
return vec3;
}
osg::Vec3d TrackballRotate::world2Screen(osg::Vec3 worldPoint)//世界到屏幕
{
osg::Vec3d vec3;
osg::ref_ptr<osg::Camera> camera = viewer->getCamera();
osg::Matrix mVPW = camera->getViewMatrix() * camera->getProjectionMatrix() * camera->getViewport()->computeWindowMatrix();
vec3 = worldPoint * mVPW;
return vec3;
}
osg::Vec3d TrackballRotate::world2Camera(osg::Vec3 worldPoint)//世界转相机
{
osg::Vec3d vec3;
osg::ref_ptr<osg::Camera> camera = viewer->getCamera();
osg::Matrix mV = camera->getViewMatrix();
vec3 = worldPoint * mV;
return vec3;
}
osg::Vec3d TrackballRotate::camera2World(osg::Vec3 cameraPoint)//相机转世界
{
osg::Vec3d vec3;
osg::ref_ptr<osg::Camera> camera = viewer->getCamera();
//osg::Vec3d vScreen(x,y, 0);
osg::Matrix mV = camera->getViewMatrix();
osg::Matrix invertmV;
invertmV.invert(mV);
vec3 = cameraPoint * invertmV ;
return vec3;
}
osg::Vec3d TrackballRotate::screen2Camera(osg::Vec3 screenPoint)//屏幕转相机
{
osg::Vec3d vec3;
osg::ref_ptr<osg::Camera> camera = viewer->getCamera();
osg::Matrix mPW = camera->getProjectionMatrix() * camera->getViewport()->computeWindowMatrix();
osg::Matrix invertmPW;
invertmPW.invert(mPW);
vec3 = screenPoint * invertmPW;
return vec3;
}
osg::Vec3d TrackballRotate::camera2Screen(osg::Vec3 cameraPoint)//相机转屏幕
{
osg::Vec3d vec3;
osg::ref_ptr<osg::Camera> camera = viewer->getCamera();
//osg::Vec3d vScreen(x,y, 0);
osg::Matrix mPW = camera->getProjectionMatrix() * camera->getViewport()->computeWindowMatrix();
vec3 = cameraPoint * mPW;
return vec3;
}
原文链接:https://blog.csdn.net/u011310341/article/details/70159288