|
楼主 |
发表于 2014-8-1 08:52:09
|
显示全部楼层
本帖最后由 rubby 于 2014-8-1 08:59 编辑
多谢ysw大哥,
我是使用了 osg 自带的控制器 TrackballManipulator。
但是这个控制器在 win7 下鼠标中键缩放都ok,
现在在win8 下鼠标中键缩放不ok。
所以想做个菜单,用户点击这个菜单,自己修改 camera位置,进行缩放。
小弟按照你的提示,我实验如下:
1.第一种方法:当用户点击菜单后,指向如下动作:
-
- mViewer->getCamera()->getViewMatrixAsLookAt( eye,center,up);
-
- osg::Vec3 discount = eye-center;
- float x = discount.x()*(1.0f-factor); //factor 是缩放比例
- float y= discount.y()*(1.0f-factor);
- float z = discount.z()*(1.0f-factor);
- mViewer->getCamera()->setViewMatrixAsLookAt( eye+osg::Vec3(x,y,z),center,up);
复制代码
经过测试,eye的值确实改变了,但是场景图并没有放大,毫无变化
2. 第二种方法:
我继承了TrackballManipulator。将zoomModel()方法改为public暴露出来,
当用户点击菜单后,执行如下动作:
- myManipulator->zoomModel(factor,true);
复制代码
但是一运行,程序报错,访问冲突。
麻烦 大哥,再帮我看看原因。 |
|