VR开发中陀螺仪数据转换

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
VR项目数据开发处理流程图主要包括以下几步: 1. 数据采集:首先需要确定需要采集哪些数据,例如VR场景的用户操作数据、用户反馈数据、场景的物品数据等等。然后通过各种采集手段(例如传感器、手柄等)进行数据采集。 2. 数据处理:采集到的数据需要进行清洗、筛选,提取有效的数据,去除无效或者冗余的数据。然后可以进行数据归一化处理,使得数据能够进行有效比较和分析。 3. 数据存储:处理完的数据需要存储到数据,以供后续的分析和使用。建议采用关系数据库,例如MySQL等,方便使用SQL语言进行数据查询和处理。 4. 数据分析:对存储在数据数据进行分析,发现数据的规律和趋势。例如对用户行为数据进行分析,发现用户最常操作的按钮或手势,或通过用户反馈数据分析出用户最不满意的场景和物品。 5. 数据可视化:通过图表、报告等方式对分析出来的数据进行可视化呈现,方便产品决策者或者开发人员理解数据,并制定相应的产品策略和开发计划。 6. 数据应用:根据分析出来的数据,进行产品的改进和优化。例如对用户体验不好的场景或物品进行改进,或者增加用户使用频率高的功能等等。 通过上述流程,可以对VR项目数据进行有效的采集、处理、分析和应用,为项目的发展提供有力的基础支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值