查看: 1624|回复: 13

关于视点平移的问题

[复制链接]

该用户从未签到

发表于 2013-9-5 20:04:44 | 显示全部楼层 |阅读模式
本帖最后由 天行剑 于 2013-10-18 11:41 编辑

我用3ds max做好模型导入osg中,然后用视角跟踪模式跟随运动的模型,发现视角始终处于当初3ds max中的坐标原点位置,能不能把视角变换到某一特定位置呢?如果可以,请问该用什么方式实现呢?
(我的意图是以第一人称视角跟踪模型的二级子节点,当二级子节点运动时视角能够相当于绑定在二级子节点上一样跟随它。目前我用findnode来寻找二级子节点,然后用FollowNodeMatrixManipulator来跟随,确实成功了,美中不足的是当二级子节点旋转时,视角朝向确实与二级子节点一致,但是旋转轴不在二级子节点上,而是仍然停留在模型的中心点上,如我在12楼贴图所示那样,我想实现的是视角旋转轴、朝向都与二级子节点的也重合。如果能实现12楼第三张图那样就好了,苦于不知如何实现呢,呵呵) 视角跟踪.jpg

该用户从未签到

发表于 2013-9-5 20:54:47 | 显示全部楼层
如果你用的漫游器是NodeTrackerManipulator
漫游器,你可以继承他重写一下他,里面有一个computeNodeCenterAndRotation函数
nodeCenter 在乘上上一个translate,这样可设置一个相对原点的位置了

该用户从未签到

发表于 2013-9-5 21:24:18 | 显示全部楼层
竟然还有这么便利的漫游器?新出来的么?发展真迅速啊。其实我以为自己修改一下模型数据,将模型整体偏移到你想要的位置。比如获取到所有的VertexArray,并对所有的Vertex进行平移操作。。。不过大概不只是顶点数据吧,我想法线也要处理?只是这么个想法。

该用户从未签到

 楼主| 发表于 2013-9-7 08:07:04 来自手机 | 显示全部楼层
abnerring 发表于 2013-9-5 20:54
如果你用的漫游器是NodeTrackerManipulator
漫游器,你可以继承他重写一下他,里面有一个computeNodeCent ...

好的,谢谢你,我试试看,不懂的还得请教你呢

该用户从未签到

发表于 2013-9-8 17:28:09 | 显示全部楼层
天行剑 发表于 2013-9-7 08:07
好的,谢谢你,我试试看,不懂的还得请教你呢

不用客气, 大家都是相互学习

该用户从未签到

 楼主| 发表于 2013-9-11 11:22:27 | 显示全部楼层
daiday 发表于 2013-9-5 21:24
竟然还有这么便利的漫游器?新出来的么?发展真迅速啊。其实我以为自己修改一下模型数据,将模型整体偏移到 ...

我也是像你这么做的,这么做以后旋转中心与视点中心是一致的,所以当控制该物体旋转或者原地转向时问题就出来了,场景显得不够真实了

该用户从未签到

发表于 2013-9-11 14:29:07 | 显示全部楼层
天行剑 发表于 2013-9-11 11:22
我也是像你这么做的,这么做以后旋转中心与视点中心是一致的,所以当控制该物体旋转或者原地转向时问题就 ...

修改模型不是长久之计

该用户从未签到

 楼主| 发表于 2013-9-11 18:21:33 | 显示全部楼层
abnerring 发表于 2013-9-11 14:29
修改模型不是长久之计

是啊 正是因为这样才要学你的方法的呢

该用户从未签到

发表于 2013-9-12 17:30:05 | 显示全部楼层
天行剑 发表于 2013-9-11 18:21
是啊 正是因为这样才要学你的方法的呢

osg::ref_ptr<osgGA::NodeTrackerManipulator> nodeTracker = new
osgGA::NodeTrackerManipulator;
nodeTracker->setHomePosition( osg::Vec3(0, -10.0, 0),
osg::Vec3(), osg::Z_AXIS );
nodeTracker->setTrackerMode( osgGA::NodeTrackerManipulator::NODE_
CENTER_AND_ROTATION );
nodeTracker->setRotationMode(
osgGA::NodeTrackerManipulator::TRACKBALL );
nodeTracker->setTrackNode( model );
这样试试,比较简便

该用户从未签到

 楼主| 发表于 2013-9-12 21:41:59 | 显示全部楼层
abnerring 发表于 2013-9-12 17:30
osg::ref_ptr nodeTracker = new
osgGA::NodeTrackerManipulator;
nodeTracker->setHomePosition( osg: ...

好,非常感谢,我试试去

该用户从未签到

发表于 2013-9-13 10:52:51 | 显示全部楼层
还是视点变换的问题

该用户从未签到

 楼主| 发表于 2013-9-13 12:55:56 | 显示全部楼层
liuzhiyu123 发表于 2013-9-13 10:52
还是视点变换的问题

是啊 前一阵子打算用视角跟踪某个特定的子节点的 现在这个问题解决了 但是发现屏幕视角与子节点视角朝向是一致的 但是并不与子节点在一个中心点 就像图1和图2那样 我的摄像机(黄色)与坦克炮塔朝向一致(红圆圈为旋转中心) 但是旋转中心不在一起 打算实现图3那样的效果 所以在看如何进行视点平移呢 视角跟踪.jpg

该用户从未签到

发表于 2013-9-14 13:58:46 | 显示全部楼层
先移到统一的中心 ,然后 旋转 ,然后再移到原来的位置 就保持 同样的观察角度了

该用户从未签到

 楼主| 发表于 2013-10-18 11:38:54 | 显示全部楼层
abnerring 发表于 2013-9-12 17:30
osg::ref_ptr nodeTracker = new
osgGA::NodeTrackerManipulator;
nodeTracker->setHomePosition( osg: ...

我试了,这个方法还是不行啊……这个方法只能跟踪模型,但是模型上其他东西(即二级子节点)还是没办法跟踪的。我的意图是以第一人称视角跟踪模型的二级子节点,当二级子节点运动时视角能够相当于绑定在二级子节点上一样跟随它。目前我用findnode来寻找二级子节点,然后用FollowNodeMatrixManipulator来跟随,确实成功了,美中不足的是当二级子节点旋转时,视角朝向确实与二级子节点一致,但是旋转轴不在二级子节点上,而是仍然停留在模型的中心点上,如我在12楼贴图所示那样,我想实现的是视角旋转轴、朝向都与二级子节点的也重合。如果能实现12楼第三张图那样就好了,苦于不知如何实现呢,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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