bug00

本贴目的:本周开发时需要做一个刚体和柔体联动的平移和旋转操作,困扰了我很长时间,特意写篇帖子记录一下
参考文章:https://www.cnblogs.com/soroman/archive/2009/05/15/1457863.html
写的很详细,解决了我的困惑

描述

需要对一个物体进行平移和旋转操作,旋转时需要绕着一个动态的坐标系(坐标系位置可变,x,y,z轴方向不变)
采用方案,获取力反馈设备每帧需要的位移和旋转矢量(四元数),然后作用到物体上面,使之可以和力反馈设备的位移旋转同步。

问题

物体始终无法绕着自身的轴进行旋转,具体表现是物体绕着世界坐标空间轴进行旋转

解决

首先我们要搞明白力反馈中传出的旋转参数是什么,是一个四元数,代表当前力反馈设备在自己的固定坐标系下的旋转度数。
那么每次的旋转矢量就代表力反馈相对于上一帧的旋转偏差。
然后我们获取的物体位置又是什么,是物体在世界坐标空间下的位置(由于要对柔体操作,因此需要获得每个网格顶点的位置)
也就是说我们直接让旋转参数作用在物体上就会出现一个问题,物体是在世界坐标系下进行旋转的,可以想象地球的公转。
而我需要的是地球的自转
在想明白了这一点之后就可以愉快地解决问题了

  • 首先需要将物体转换到需要的坐标系下,得到局部坐标空间。
  • 对物体进行旋转操作,得到物体的新位置。
  • 然后根据局部坐标系在世界坐标系下的旋转和位置,将物体转换到世界坐标空间下。

其实最终的效果就是在地球公转(世界坐标系)的同时保持了自转(局部坐标系)

总结

  • 变换的时候,一定要知道是在哪个坐标系(世界还是局部)下进行的,这样才可以准确地描述方位。
  • 当碰到局部变换较多的情况下(地球自转,手臂运动时手掌的旋转),最好选取局部坐标系,这样的描述会很清晰,方便。
发布了17 篇原创文章 · 获赞 7 · 访问量 955

猜你喜欢

转载自blog.csdn.net/qq_29639589/article/details/100637782