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半年过去了,最近同事问,又给同事讲解了下,贴出自己的拙见供大家探讨!
VR开发中陀螺仪数据转换相关推荐
- VR开发中性能问题—OculusWaitForGPU
http://blog.csdn.net/cartzhang/article/details/50788894 VR开发中性能问题-OculusWaitForGPU 本文章由cartzhang编写,转 ...
- Unity VR开发中UI始终优先渲染不被物体遮挡
Unity VR开发中UI始终优先渲染不被物体遮挡 在用Vive开发VR的时候,3DUI很容易被场景中的物体遮挡,解决办法是使用一个Shader:Overlay.shader,这个shader很好找, ...
- 【狂云歌之unity_vr】VR开发中的优化
[狂云歌之unity_vr]VR开发中的优化 前言 大概做了大半年的VR开发,HTCVive上与room scale和手柄控制器.激光相关的开发做过,gearvr使用oculus sdk开发做过,使用 ...
- 7个VR开发中容易混淆的概念:SteamVR、OpenVR、OpenXR……
在进行Unity VR应用程序开发过程中,有几个容易混淆的概念, 本文将尝试做一次区分,如果有任何疑问,读者可在文末留言共同讨论.这几个概念包括OpenVR .OpenVR Desktop.OpenV ...
- VR硬件演进与其游戏开发中的若干注意事项
最近两年虚拟现实(Virtual Reality,简称VR)从刚刚走进公众视野到逐渐变得炙手可热,很多不同领域的IT开发者都想进入虚拟现实领域.本篇文章将首先讲解VR入门所需要学习的知识,然后从VR软 ...
- VR开发基础(一)一文理清unity xr plugin架构与openxr标准
一,VR开发中的几个概念:从openVR到openXR 1. OpenVR OpenVR是Valve公司开发的一套包含一系列SDK和API的工具集,旨在从驱动层级为硬件厂商提供软硬件开发支持.硬件设备 ...
- 访《VR开发实战》作者冀盼——VR 开发者的核心竞争力
"一边是火焰,一边是深海",可谓是 VR 行业的真实写照,因资本而起又因资本而却的 VR ,一时之间宛如六月天.如今硬件不温不火持续地升级,应用也一步一步地向 B 端市场摸索前行, ...
- 【VR开发】Unity中VR开发的基本设置-如何设置Player视角
[背景] 上一篇博文,我们通过导入需要的插件完成了Unity中VR开发的环境准备,接下来就需要在项目中真正着手布局VR,首先就是作为玩家的视角如何导入. [设置方法] 在Hierarchy中新建一个空 ...
- Android开发中Google VR全景的实现
VR在现在生活中已经随处可见,在移动端上的应用更是屡见不鲜,在android 开发中VR更是应用在多个领域,汽车.家装.景区等,下面我就使用google的vr-sdk简单实现全景: 1.效果图如下: ...
最新文章
- php新版本废弃 preg_replace /e 修饰符
- MOBA项目定点数的一个想法
- 查看进程状态信息命令 jps - (Java Virtual Machine Process Status Tool)
- leetcode 36. Valid Sudoku | 37. Sudoku Solver(数独)
- vscode终端无法输入
- 原来AI也可以如此简单!教你从0到1开发开源知识问答机器人
- Python+tkinter根据窗体大小自动缩放并显示图像
- amazon linux 用户名,如何在Amazon AWS上设置一台Linux服务器
- linux alias命令
- jpg格式怎么免费压缩大小
- 打印机提示服务器状态未知,win7打印机提示rpc服务器不可用怎么办
- 数据库:园林软件(综合类题库)
- ubuntu16.04 安装jre
- 分形理论与波动理论研究
- c#入门经典第6版pdf百度云盘_C#入门经典第6版中文pdf_NET教程
- python中文乱码如何处理、如何处理跨域_解决Python发送Http请求时,中文乱码的问题...
- Linux之nslookup命令使用详解—网络故障定位(一)
- Mac OS之Latex(MacTeX)初体验
- python--re模块及爬取红牛分公司实战演练
- 51 汇编语言编程--输入密码
热门文章
- android 动态设边距,在代码中动态设置页边距 - android
- 骨头收藏家-01背包
- 初探Oracle:Oracle用户管理命(命令)
- E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
- 爬取两万多数据,告诉你广州房租价格现状(4)
- Linux解压下载安装命令
- 微信为何先推出mac版本而后推出windows版本
- 基础指标(原子指标)、复合指标、派生(衍生)指标的含义
- 11-20210225华为海思Hi3518EV300在鸿蒙系统下测试摄像头(拍照+录像)
- 目标检测 | Anchor free之CenterNet深度解析