查看: 1205|回复: 4

重写拖拽器的拖拽坐标线异常

[复制链接]

该用户从未签到

发表于 2011-6-1 17:45:03 | 显示全部楼层 |阅读模式
派生了一个新的复合拖拽器,为了实现拖拽坐标轴线保持像素大小不变,重写了遍历函数traverse如下:
void grTranslateTrackballDragger::traverse( osg::NodeVisitor& nv )
{
        if (nv.getVisitorType()==osg::NodeVisitor::CULL_VISITOR )
        {
                osgUtil::CullVisitor* cv = static_cast<osgUtil::CullVisitor*>(&nv);

                float pixelSize = cv->pixelSize(getBound().center(), 0.48f);
                if ( pixelSize!=m_draggerSize )
                {
                        float pixelScale = pixelSize>0.0f ? m_draggerSize/pixelSize : 1.0f;
                        osg::Vec3d scaleFactor(pixelScale, pixelScale, pixelScale);

                        osg::Vec3 trans = getMatrix().getTrans();
                        setMatrix( osg::Matrix::scale(scaleFactor) * osg::Matrix::translate(trans) );
                }
        }

        osgManipulator::CompositeDragger::traverse(nv);
}
出现的问题是坐标轴拖拽线不停的变长变短,osgManipulator例子中实现该效果采用的是用一个从Group节点派生下来的节点组合一个拖拽器,然后也是这样重写该节点的遍历函数就不会出现这种问题,而我派生一个拖拽器出来就出现这种问题,为什么呢?

该用户从未签到

发表于 2011-6-2 09:32:49 | 显示全部楼层
osgmanipulator中我提供了一种方法来实现“保持像素大小不变”,您可以参考

该用户从未签到

发表于 2011-6-3 12:26:32 | 显示全部楼层
osgmanipulator中我提供了一种方法来实现“保持像素大小不变”,您可以参考
具体点?我也看下

该用户从未签到

 楼主| 发表于 2011-6-3 13:34:18 | 显示全部楼层
这个例子我已经看过了,例子中用的是对象组合的方式实现的,我用继承有问题,不知道原因

该用户从未签到

发表于 2011-6-3 16:20:11 | 显示全部楼层
osgmanipulator中我提供了一种方法来实现“保持像素大小不变”,您可以参考
具体点?我也看下
fenma3422 发表于 2011-6-3 12:26



更新最新的svn版本,浏览osgmanipulator例子就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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