查看: 2432|回复: 5

manipulator旋转问题

[复制链接]

该用户从未签到

发表于 2012-3-29 22:41:32 | 显示全部楼层 |阅读模式
本帖最后由 dlhuaan 于 2012-3-29 22:53 编辑

想做一个manipulator,和trackball类似,

以场景里的某个物体的中心为旋转中心旋转:像cad软件/3DSMAX选中某个物体,以该物体的中心旋转一样(该物体不一定在屏幕中心).

而trackball只能按照屏幕的中心点旋转.看了一下ARCBALL的实现原理,觉得好像继承TRACKBALL完成不了该功能.

怎样才能实现呢?
----------------------------------------------------------------------------------------------------------

trackballmanipulator->setCenter(物体中心坐标),只能将物体中心重置于屏幕中心,按屏幕中心旋转,没达到目的。

目前理解就是trackball偏移一个矩阵而已,是不是trackball哪个地方乘个矩阵就行?

该用户从未签到

发表于 2012-3-30 09:57:30 | 显示全部楼层
以物体为中心旋转,把viewport定位到这个物体上就好了,然后arcball只控制eyedir的转动,自己再反算一个up就够了

该用户从未签到

发表于 2012-6-20 15:38:15 | 显示全部楼层
"以物体为中心旋转,把viewport定位到这个物体上就好了,然后arcball只控制eyedir的转动,自己再反算一个up就够了"
array,你好。我目前也遇到这个问题,目前还是新手,所以请教下:能说再详细些么?具体用程序怎么实现?谢谢!

该用户从未签到

发表于 2012-6-21 09:19:07 | 显示全部楼层
如何说的更详细?center已知,eye通过鼠标来控制得到坐标位置,因此look dir也可知,之后先计算side vector = look dir ^ Z(注意如果look dir = Z_AXIS的话,要特殊处理),然后计算up = side ^ look dir

该用户从未签到

发表于 2012-6-21 23:52:42 | 显示全部楼层
本帖最后由 buaahc 于 2012-6-22 11:58 编辑

写错了已经删了

该用户从未签到

发表于 2012-6-22 11:25:27 | 显示全部楼层
本帖最后由 buaahc 于 2012-6-22 15:24 编辑

不好意思啊,说错了,对不住啊~~
array你说的估计一般人看不懂~~
最简单的应该是getinverseMatrix()的代码
{
return inverse(osg::matrxi::rotate(Rotate)*osg::translate(this->vViewPoint)*osg::matrix::translate(Center));}
但是this->vViewPoint要根据Rotater进行编写,~
这样我觉得更容易理解
也就是所谓的旋转一定角度,然后将相机拉到这个角度对应的位置,然后再将相机拖到你想对准的物体,Center就是你想绕着旋转地物体~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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