您的位置:首页 > 其它

OSG学习笔记25——屏幕坐标——相机坐标——世界坐标之间的转换

2017-04-13 16:28 1191 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: