VR开发中陀螺仪数据转换
来源:互联网 发布:羊毛 知乎 编辑:程序博客网 时间:2024/05/30 04:36
1、判断手机是否支持陀螺仪
SystemInfo.supportsGyroscope
2、获取陀螺仪数据并转换
Gyroscope gyro = Input.gyro;gyro.enabled = true;
读取陀螺仪数据并转换到右手坐标系下
var att = Input.gyro.attitude * Quaternion.identity;att = new Quaternion(att.x, att.y, -att.z, -att.w);
由于unity里边是左手坐标系,因此需要做偏转(先进行a旋转再进行b旋转等价于执行乘积ba代表的单一旋转因此四元数能用来连接多次旋转,这个矩阵乘法的效果一样,根据四元数乘法的定义这个旋转是以从右向左的顺序发生的**)
Quaternion curGyroRotation = Quaternion.Euler(90, 0, 0) * att;
3、但是实现开发过程中游戏内部的正方向是一定的,要让用户以不同的方向进入游戏都可以正常玩,就需要求出当前陀螺仪数据和游戏中初始方向的差值,当然差值x,y,z方向都有值,但为了用户方便,把x,z方向的偏差忽略,只计算y方向的偏差,如果算x,z,用户在使用过程中旋转角度会很累,脖子的偏转角度有限,哈哈。。。
curGyroRotation = Quaternion.Euler(0, curGyroRotation.eulerAngles.y, 0);//trsRoler.eulerAngles 游戏开始时角色的角度Quaternion standRotation = Quaternion.Euler(0, trsRoler.eulerAngles.y, 0);Quaternion gyroRotationOff = Quaternion.Inverse(curGyroRotation) * standRotation;
为什么要用这个函数(Quaternion.Inverse),看下图
由于四元数相乘是角度的叠加,要求角度差,只能通过矩阵转置了。
求得角度差之后我们就可以拿来改变摄像机了
Quaternion realGyroRotation = Quaternion.Euler(90, gyroRotationOff .eulerAngles.y, 0) * att;
4、游戏刚开始时,不可能让玩家带着cardboard转圈去找startUI, 因此必须固定y和z,只让用户能够操控x,就头上下活动,注(场景中NGUI的3D摄像机UI)
Quaternion tmpRotation = GetGyroRotation(); Vector3 euler = tmpRotation.eulerAngles; euler.y = 0; euler.z = 0; trsUICamera3D.eulerAngles = euler;
距离做完VR半年过去了,最近同事问,又给同事讲解了下,贴出自己的拙见供大家探讨!
阅读全文
0 0
- VR开发中陀螺仪数据转换
- VR开发-陀螺仪部分研究
- VR开发-陀螺仪部分研究
- 陀螺仪(可用于AR/VR)
- 3D陀螺仪脚本(VR)
- react vr禁用手机陀螺仪的方法
- Unity3D基于陀螺仪实现VR相机功能
- VR开发 VR development
- Unity中陀螺仪控制
- VR 开发
- VR开发
- vr开发
- VR开发
- VR中的9轴传感器(重力加速度/陀螺仪/磁力计).md
- VR中的9轴传感器(重力加速度/陀螺仪/磁力计)
- 加速度计和陀螺仪数据融合
- VR开发——Unity中导入常用的VR开发插件及简单使用
- 陀螺仪
- 数学建模————统计问题之仿真(四)
- trie
- maven创建父子工程理解
- Scala入门到精通——第十八节 隐式转换与隐式参数(一)
- eclipse使用出现异常An error has occurred.see error log for more details eclipse 解决方案
- VR开发中陀螺仪数据转换
- 基于Python的CGIHTTPServer简单的交互实现
- mac android studio无法打开android device monitor的问题
- c++ 一维数组 求最大值,平均值,中值,方差
- JDBC学习笔记
- HoloLens开发笔记-制作传送门
- string类的简单使用
- php编程安全指南
- 对称的二叉树