查看: 1304|回复: 4

希望高手能进来解答下。。。相机拉近问题!!求Array啊

[复制链接]

该用户从未签到

发表于 2012-4-16 10:31:33 | 显示全部楼层 |阅读模式
就是我希望在默认操作器下,拉近相机并对着我想要的地方。例如,我现在创建了一个地球,我想程序刚运行的时候视口近距离对着台湾地区。
我试了一种方法:
osgGA::TrackballManipulator*tb =new osgGA::TrackballManipulator;
tb->setHomePosition(osg::Vec3f(28.3586f,-48.4234f,25.75697f),osg::Vec3f(27.89935f,-47.6392f,25.3398f),osg::Vec3f(0.0046f,0.4717f,0.8817f));
viewer->setCameraManipulator(tb);
这个可以实现效果,但是操作器出现了问题,默认操作器是鼠标左键可以放大或缩小物体,右键可以自由旋转物体,但现在这些功能都没有了,而且操作幅度很大,一不小心球就弄没了。
不知道是怎么回事,希望您能帮我解答下,看有没有办法可以达到效果且保持默认操作器的功能?非常感谢!!!

该用户从未签到

发表于 2012-4-16 19:49:35 | 显示全部楼层
你可以参考osgEarth,那么操作器EarthManipulator就提供这样的借口。
        /**
         * Sets the camera position, optionally moving it there over time.
         */
        virtual void setViewpoint( const Viewpoint& vp, double duration_s =0.0 );

如果上述条件不成立,那么参考之……

该用户从未签到

发表于 2012-4-17 10:30:30 | 显示全部楼层
您最好是在回调中直接setByMatrix设置过去,而不是修改零点的位置,那样会有一些问题

该用户从未签到

 楼主| 发表于 2012-4-17 18:11:42 | 显示全部楼层
array 发表于 2012-4-17 10:30
您最好是在回调中直接setByMatrix设置过去,而不是修改零点的位置,那样会有一些问题

Array能说具体点么?怎么在回调中setByMatrix??刚接触OSG,很多东西还不是很熟,希望能多指点下!!

该用户从未签到

发表于 2012-4-18 13:32:17 | 显示全部楼层
我不知道还要如何去具体,您只要知道什么是NodeCallback,然后知道漫游器有setByMatrix()这个函数,就清楚我的意思了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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