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

    xiaoxiao2021-04-12  51

    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://ju.6miu.com/read-667809.html

    最新回复(0)