|
楼主 |
发表于 2011-12-19 11:57:47
|
显示全部楼层
这是最新修改的代码,可以实现部分功能,- else if (buttonMask==GUIEventAdapter::MIDDLE_MOUSE_BUTTON ||
- buttonMask==(GUIEventAdapter::LEFT_MOUSE_BUTTON|GUIEventAdapter::RIGHT_MOUSE_BUTTON))//鼠标中键或者同时按鼠标左键和右键
- {
- // pan model.上下左右移动模型
- float scale = -0.5f*_distance;//比例尺
- osg::Matrix rotation_matrix;//旋转矩阵
- rotation_matrix.makeRotate(_rotation);
- osg::Vec3 dv(dx*scale,dy*scale,0.0f);//平移向量
- //碰撞检测
- osg::Vec3 startp;
- osg::Vec3 endp;
- startp=_eye;
- endp=_eye+dv*rotation_matrix;
- if (collision(startp,endp))
- return false;
- else
- {
- _center+=dv*rotation_matrix;
- _eye = endp;//Camera中心位置
- return true;
- }
- }
- bool TrackballManipulator_01::collision(osg::Vec3& startp,osg::Vec3& endp)
- {
- //线段测试内容
- osgUtil::IntersectionVisitor iv;
- osgUtil::LineSegmentIntersector* lineTest = new osgUtil::LineSegmentIntersector(startp,endp);
- iv.setIntersector(lineTest);
- _node->accept(iv);
- return lineTest->containsIntersections();
- }
复制代码 |
|