查看: 3240|回复: 3

旋转的问题

[复制链接]

该用户从未签到

发表于 2008-3-28 10:05:48 | 显示全部楼层 |阅读模式
在osgViewerMFC 例子里,在响应鼠标拖动时,模型能够旋转
由于程序需要我重新写了一个Manipulator,重写了它的handle函数
我想在鼠标拖动时,模型仍然能够旋转
但是不知道它旋转的圆心以及角度是如何确定的。希望各位帮帮忙啊

该用户从未签到

发表于 2008-3-28 12:29:41 | 显示全部楼层

圆心应该就是屏幕的中心点,角度就要根据你当前鼠标的位置来计算了~~~~~
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-3-28 15:18:52 | 显示全部楼层
    模型能够旋转


    个人感觉应该不是模型在转,一般操作器都有下面的虚接口来控制场景:

    void TrackballManipulator::setByMatrix(const osg::Matrixd& matrix)
    {
        _center = osg::Vec3(0.0f,0.0f,-_distance)*matrix;
        _rotation = matrix.getRotate();
    }

    osg::Matrixd TrackballManipulator::getMatrix() const
    {
        return osg::Matrixd::translate(0.0,0.0,_distance)*osg::Matrixd::rotate(_rotation)*osg::Matrixd::translate(_center);
    }

    osg::Matrixd TrackballManipulator::getInverseMatrix() const
    {
        return osg::Matrixd::translate(-_center)*osg::Matrixd::rotate(_rotation.inverse())*osg::Matrixd::translate(0.0,0.0,-_distance);
    }


    类似于这样的矩阵操作,,根据当前的position和lookat可以得到一个矩阵,这个矩阵就是控制当前视口的矩阵,如果是模型在转,怎么做多通道呢,两台机器的视口怎么同步呢

    所以应该是视口在转

    该用户从未签到

    发表于 2008-3-28 15:32:30 | 显示全部楼层
    恩,那里面的确是视口在转,没仔细看,, :L :L ,,,不过,也可以手动控制局部模型模型旋转~~~~~~~
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

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

    联系我们

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