|
派生了一个新的复合拖拽器,为了实现拖拽坐标轴线保持像素大小不变,重写了遍历函数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节点派生下来的节点组合一个拖拽器,然后也是这样重写该节点的遍历函数就不会出现这种问题,而我派生一个拖拽器出来就出现这种问题,为什么呢? |
|