查看: 1647|回复: 6

屏幕选中一点,以这点为旋转中心,该怎么做?

[复制链接]

该用户从未签到

发表于 2014-6-13 14:37:44 | 显示全部楼层 |阅读模式
我在屏幕选中一点,能够获取屏幕的世界坐标,那么怎样以这点为旋转中心,该怎么做?
我困惑了好久,跪求大神给帮助
无标题.png

该用户从未签到

发表于 2014-6-18 10:15:42 | 显示全部楼层
在漫游器中添加一个vfocusPoint,将鼠标点击产生的坐标传递给它,然后再getInverseMatrix()加以利用,具体的就是在旋转之前先移动到该点,再旋转

该用户从未签到

发表于 2014-6-18 10:28:46 | 显示全部楼层
setcenter/setnode/setdistance组合

该用户从未签到

 楼主| 发表于 2014-6-18 11:29:35 | 显示全部楼层
setCenter 我用了:  _trackbalMp->setCenter(hitr->getWorldIntersectPoint());
还请gis_wudi大神指点
r/setnode/setdistance怎么组合?

该用户从未签到

 楼主| 发表于 2014-6-18 11:51:59 | 显示全部楼层
casthc 发表于 2014-6-18 10:15
在漫游器中添加一个vfocusPoint,将鼠标点击产生的坐标传递给它,然后再getInverseMatrix()加以利用,具 ...

casthc 大神 ,我自己可以获取鼠标的坐标x,y,在漫游器handle里面,通过鼠标的点击点,可以获取鼠标坐标与模型的交点P(x,y,z);我按照你的方法添加了一个vfocusPoint,把与模型的交点坐标传递给vfocusPoint,但是获取矩阵getInverseMatrix()加以利用?能否具体点?

该用户从未签到

发表于 2014-6-18 14:15:05 | 显示全部楼层
漫游器里面有getInverseMatrix()接口,我上午说错了应该这样
osg::Matrixd SceneManipulator::getInverseMatrix() const
{
return osg::Matrixd::inverse(mMatrix*osg::Matrix::translate(this->vFocusPoint) );
}

mMatrix是你的旋转矩阵。
我上午说的先移动然后旋转是错误的

该用户从未签到

发表于 2016-7-6 14:19:21 | 显示全部楼层
LZ实现了吗?分享下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表