OSG中屏幕坐标和世界坐标的转化

来源:互联网 发布:阿里云解析设置 编辑:程序博客网 时间:2024/05/16 14:12

屏幕-------->世界

可以使用osgUtil::SceneView::ProjectWindowIntoObject()来计算

bool SceneView::projectWindowIntoObject(const osg::Vec3& window,osg::Vec3& object) const{    osg::Matrix inverseMVPW;    inverseMVPW.invert(computeMVPW());        object = window*inverseMVPW;        return true;}const osg::Matrix SceneView::computeMVPW() const{    osg::Matrix matrix( getViewMatrix() * getProjectionMatrix());            if (getViewport())        matrix.postMult(getViewport()->computeWindowMatrix());    else        OSG_WARN<<"osg::Matrix SceneView::computeMVPW() - error no viewport attached to SceneView, coords will be computed inccorectly."<<std::endl;    return matrix;}


或者自己运算

Matrix VPW = camera->getViewMatrix() *             camera->getProjectionMatrix() *             camera->getViewport()->computeWindowMatrix();Matrix inverseVPW = Matrix::inverse(VPW);Vec3d world = window * inverseVPW;

世界------>屏幕

就是上面的矩阵不要求逆即可!




0 0
原创粉丝点击