android 坐标系 旋转,android IMU旋转矩阵横屏矫正(remapCoordinateSystem函数原理)

横屏问题

近期开发遇到个横屏问题.我们需要使用手机IMU返回的旋转矩阵作为OpenGL里的视图矩阵使用.竖屏时还好.没有多想直接传给native层赋值就可以.

横屏后出现上下左右颠倒的问题.概述一下就是,原矩阵代表的摄像机坐标系是这样的:

|y

|

|-------x

/

/z

y为屏幕上方向,x为屏幕右反向,z为屏幕朝里.

当手机横屏倒过来了,当机身和地面垂直,机身保持水平不变时,IMU返回的矩阵可以用以下坐标系表示:

|x

|

|

y-------

/

/

/z

但是OpenGL使用的视图矩阵代表的坐标系还是第一个,也就是我们需要把新坐标系下的x轴 -y 轴对调.z轴不变.一种方法是直接换轴.根据理解矩阵(一) - 孟岩 - 博客频道 - CSDN.NET的表述,直接把旋转矩阵中代表x轴,-y轴的两个向量互换就行.

另一种理解是将该坐标系绕z轴旋转90度即可.以R表示旋转变换矩阵,那么在OpenGL中用R左乘视图矩阵即可得到旋转矫正后的摄像机坐标系.即:

M′view=R⋅Mview

关于左乘和右乘

这里摘自第二篇引用文章.

左乘(left multiplication, pre-multication)和右乘(right multiplication, post-multication),这里的左右、pre/post,指的是矢量和矩阵相乘时,矢量的位置。对标量和矩阵相乘时,指标量的位置。

说简单点,左乘(又称前乘)就是乘在左边(即乘号前),右乘(又称后乘)就是乘在右边(即乘号后).

所以想法很简单,就是让坐标系绕自身z轴旋转90度就行,但是调了很久都没弄出来.遇到的挫折就不说了.最后不算了重新找资料发现其

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值