查看: 1164|回复: 3

osgimpostor例子漫游请教

[复制链接]

该用户从未签到

发表于 2012-12-1 22:49:36 | 显示全部楼层 |阅读模式
本帖最后由 allenjiao 于 2012-12-3 11:00 编辑

osgimpostor例子里面下面方法
bool TestManipulator::calcMovement()
{

    // return if less then two events have been added.
    if (_ga_t0.get()==NULL || _ga_t1.get()==NULL) return false;

    float dx = _ga_t0->getXnormalized()-_ga_t1->getXnormalized();
    float dy = _ga_t0->getYnormalized()-_ga_t1->getYnormalized();


    // return if there is no movement.
    if (dx==0 && dy==0) return false;

    unsigned int buttonMask = _ga_t1->getButtonMask();
    if (buttonMask==GUIEventAdapter:: LEFT_MOUSE_BUTTON)
    {

        // rotate camera.
        //下面实现了视点的左右移动
        osg:: Quat new_rotate;
        new_rotate.makeRotate( dx / 3.0f, osg::Vec3(0.0f, 0.0f, 1.0f));
                
        _rotation = _rotation*new_rotate;

        return true;

    }
    else if (buttonMask==GUIEventAdapter::MIDDLE_MOUSE_BUTTON)
    {

        // pan model.

        osg::Vec3 dv = osg::Vec3(0.0f, 0.0f, -500.0f) * dy;

        _center += dv;
        
        return true;

    }
    else if (buttonMask==GUIEventAdapter::RIGHT_MOUSE_BUTTON)
    {
        osg::Matrixd rotation_matrix(_rotation);
   
                        
        osg::Vec3 uv = osg::Vec3(0.0f,1.0f,0.0f)*rotation_matrix;
        osg::Vec3 sv = osg::Vec3(1.0f,0.0f,0.0f)*rotation_matrix;
        osg::Vec3 fv = uv ^ sv;
        osg::Vec3 dv = fv*(dy*-500.0f)-sv*(dx*500.0f);

        _center += dv;

        return true;
    }

    return false;
}


请教如何dx不等于0的时候视点左右移动,同时dy不等于0的时候视点上下俯仰???
希望能得到大师指教

该用户从未签到

 楼主| 发表于 2012-12-1 23:15:37 | 显示全部楼层
本帖最后由 allenjiao 于 2012-12-1 23:16 编辑

                        osg:: Quat new_rotate;
                        new_rotate2.makeRotate( dx / 3.0f, osg::Vec3(0.0f, 0.0f, 1.0f),
                                                    dy / 3.0f, osg::Vec3(1.0f, 0.0f, 0.0f),
                                                                        0.0f, osg::Vec3(0.0f, 0.0f, 0.0f));
                        _rotation = _rotation*new_rotate;

改成这样视点移动还是有问题

该用户从未签到

发表于 2012-12-3 08:16:41 | 显示全部楼层
修改center就可以了

该用户从未签到

 楼主| 发表于 2012-12-3 11:02:09 | 显示全部楼层
liuzhiyu123 发表于 2012-12-3 08:16
修改center就可以了

谢谢你的回答 ,可能是我表述有些问题。
应该是视点上下俯仰,而不是视点上升 下降
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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