《图说VR入门》——VR大朋的(陀螺仪)枪

本文章由cartzhang编写,转载请注明出处。 所有权利保留。
文章链接: http://blog.csdn.net/cartzhang/article/details/53583784
作者:cartzhang

说明一下:大鹏官方网址上并没有这样款产品。是内购的他们的陀螺仪,然后自己添加到眩感枪上的。
所以题目为大鹏的枪,可能不太妥贴,但是暂时没有其他好的想法。看了下大鹏官方
http://mall.deepoon.com/
没有任何相关,只有我们自己内购的东西。所以可能通用之处不大。下面也说了,就当自己记录使用了。在
最后也对大鹏的陀螺仪也就是其头盔的主要部件,给了评价。

之前在VR的射击游戏中,使用了大鹏的枪,其实也就是他们的陀螺仪。现在不用了,我们自己开发了新的枪。但是还是要简单的介绍一下,使用的方法和使用过程中的一些问题和可能的解决方法。
大鹏的枪做的还是可以用的。我这里用的是有线的版本。算是做的一个笔记记录。
在文章后面给出了所有资源的地址和项目的github可下载地址。

一、所需资源

1. 在Software下的DeePoonUnityPC0.2.8b_forUnity5.0,这个是deepoon为配合枪给出的Unity插件。

图1

2. 使用了Unity5.3.0f4版本

图0

3. 硬件接入

这个并没有驱动,是一个免驱的,插到USB后,如下图:

图2
但是虽然有黄色的叹号,但是这个不影响正常使用。

二、Deepoon gun的样例

首先,导入大鹏的插件。

然后,自己制作了一个场景,自己也作了一个DeeponGun的预制体。

图3

保存的场景如图:

图4

其次,给枪的预制体,添加DeepoonSensor.cs代码组件.

随后,跟枪添加了一个校正的目标:

图5


图5.1
运行结果:

图6


图7

三、DeepoonSensor的代码

1. 大鹏的枪有几种不同的类型:

public enum PERIPHERAL_TYPE{Custom ,XRoverTest ,XRover1 ,DeePoonE2 ,};

其实主要不同的在于枪的初始化方向问题,然后可以在使用中使用不同的按键来进行校正。
如下代码在Update中进行实现。

if ( Input.GetKeyDown (KeyCode.T) ){peripheralsRotation[(int)PERIPHERAL_TYPE.Custom].x += -90;}if ( Input.GetKeyDown (KeyCode.Y) ){peripheralsRotation[(int)PERIPHERAL_TYPE.Custom].x += 90;}if ( Input.GetKeyDown (KeyCode.U) ){peripheralsRotation[(int)PERIPHERAL_TYPE.Custom].y += -90;}if ( Input.GetKeyDown (KeyCode.I) ){peripheralsRotation[(int)PERIPHERAL_TYPE.Custom].y += 90;}if ( Input.GetKeyDown (KeyCode.O) ){peripheralsRotation[(int)PERIPHERAL_TYPE.Custom].z += -90;}if ( Input.GetKeyDown (KeyCode.P) ){peripheralsRotation[(int)PERIPHERAL_TYPE.Custom].z += 90;}

2. 枪的初始化

枪初始化,是直接调用大鹏的DLL底层接口

void Start (){imp = new DeepoonSensorImp();imp.Init( index , DEEPOON_PRODUCT_NAMES[(int)product] );}

3. 更新旋转

void Update (){Quaternion q = imp.GetRotation();q = q * Quaternion.Euler( peripheralsRotation[(int)peripheral] );if ( Input.GetKeyDown (keyToAlign) ){if( null != objectToAlign ){alignment_rotation = Alignment( q , objectToAlign.transform.rotation );}else{alignment_rotation = Alignment( q , Quaternion.identity );}}// 代码不全....//....}

4. 对齐位置

枪由于各种原因,比如磁偏,造成的方向不对的情况,这时候就需要进行校正。

Quaternion Alignment( Quaternion cur_rotation , Quaternion object_to_align ){Vector3 ecur = cur_rotation.eulerAngles;Vector3 eobj = object_to_align.eulerAngles;return Quaternion.AngleAxis( eobj.y - ecur.y , new Vector3( 0 , 1 , 0 ) );}

校正直接对Y轴进行旋转操作,由校正对象欧拉角度减去当前角度,实现校正。

5. 退出

void OnApplicationQuit(){imp.Uninit();}

这个就是反注册DLL。

6. 更多接口调用

更多的接口和使用,在DeepoonImp.cs和DeepoonSensorImp.cs文件中,可以看到DLL的导入函数。
这里就不过多的分析和研究。

四、可能的问题

使用大鹏头盔有一段时间,发现的问题在于磁场造成的头盔或陀螺仪的漂移问题,在旧的版本上一旦出现,不重新启动游戏肯定是不能自动或通过代码来校正过来。但是至于现在大鹏最新的头盔和陀螺仪有没有做更新算法的陀螺仪磁偏校正算法,这个现在不太清楚。
但是意思不是说,之前它没有磁偏校正算法,官方说也是有的,就是还有这样的问题。因为同样都是陀螺仪,是一个类型的产品。所以,大鹏头盔之前有的问题,这个枪上还有,且一模一样。

但是作为经济实惠的选择,还是比较合适的。(大鹏官方看到,请找我充值!)

虽然还是不那么难,主要讲下应用和使用方面的问题。若是有时候枪模型和旋转方向与预期不一样,很可能就是模型的初始化方向不对,旋转正负90度就可能解决问题了。

五、资源地址

所有图片下载地址:
https://github.com/cartzhang/ImgSayVRabc/tree/master/DeeponGun_1/Img

大鹏枪的插件下载地址:
https://github.com/cartzhang/ImgSayVRabc/tree/master/DeeponGun_1/software

工程下载地址:
https://github.com/cartzhang/ImgSayVRabc/tree/master/DeeponGun_1/DeepoonGunTest/GunTest

———————THE—–END———————-

如有问题,请留言!!
非常感谢!

转载于:https://www.cnblogs.com/qitian1/p/6461887.html

《图说VR入门》——DeepoonVR的大鹏(陀螺仪)枪相关推荐

  1. 《图说VR入门》——googleVR 他山之玉

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53125482 作者:car ...

  2. 《图说VR入门》——DK2入门及其资源汇总

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53174895 作者:car ...

  3. 《图说VR入门》——googleVR入门

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/52959035 作者:car ...

  4. google vr 入门之制作简易的VR播放器(二)

    本篇博客是 <google vr 入门之制作简易的VR播放器及去除界面控制按钮>的续篇: 是对上次创建的GVR播放器的优化与增强,建议先阅读上篇 本篇对播放器设置做了进一步优化: 1.支持 ...

  5. google vr 入门之VrPanoramaView制作全景图列表,apm应用性能管理

    思路就是这么简单,这里的全景图我们需要对应的全景图控件来显示,google vr 中有对应的全景图控件VrPanoramaView,google vr 的核心是其父类VrWidgetView,VrPa ...

  6. google vr 入门之制作简易的VR播放器(三)

    先看一下效果图,如果对google vr有一定了解的朋友,会对这种效果感兴趣的!(将我们的控制界面添加到VR模式中,目前单纯的集成google vr肯定是做不了这种效果的) google vr视频播放 ...

  7. 《VR入门系列教程》之2---VR头显

    什么是虚拟现实?     虚拟现实的目标:让人们相信真实地处于一个虚拟世界中.要达到这个目标就得让人们的大脑(负责视觉和运动感知部分)欺骗他们.不同技术合在一起才可以创造这种幻觉,包括:     全立 ...

  8. 《VR入门系列教程》之14---面向大众的Unity3D

    大众化的游戏引擎--Unity3D     并不是所有VR应用都是游戏,然而现在做VR开发的几乎都会用专业游戏引擎来做,因为游戏引擎既满足了一个引擎的要求又可以方便地制作出高品质的VR应用.一个游戏引 ...

  9. google vr 入门之制作简易的VR播放器(二),安卓开发基础面试题

    陀螺仪模式和手触模式,GVR中默认陀螺仪模式一直存在,手触模式有一个开关可以打开或者关闭(默认关闭) mVideoView.setTouchTrackingEnabled(true);//开启手触模式 ...

最新文章

  1. 九九乘法表Python+Java,你知道多少?
  2. electron builder 打包错误 cannot unpack electron zip file 解决方案
  3. OpenSceneGraph学习笔记
  4. pandas read_csv 出现中文乱码
  5. 进入环境_如何进入Windows恢复环境(WinRE)
  6. 查询数据库中所有表名
  7. python关于字符串下面说法错误的是_关于字符串下列说法错误的是
  8. idea多行编辑_开发神器idea被玩残了,你们功不可没啊!
  9. oracle语法_PG数据库sql语法总结,与Oracle有什么不同?
  10. 【杂题总汇】HDU多校赛第十场 Videos
  11. Win10系统下如何修改电脑名称?windows10更改电脑名称的方法
  12. 移动硬盘损坏如何恢复数据
  13. 靠谱的录屏软件 + mp4格式转换软件
  14. [系统安全] 三十五.Procmon工具基本用法及文件进程、注册表查看
  15. linux中的module
  16. mysql alter 改密码_MySql修改密码
  17. Animator组件的使用(一)
  18. 基于FPGA 的PLC/PAC 硬件运行时的实现
  19. 数据结构-图内容总结
  20. 【matplotlib复杂的频数分布直方图】多子图,共享横纵坐标名,横坐标位置居中及标签显示,显示每个bar的频数

热门文章

  1. 求m ,n 两个数的最小公倍数
  2. NASM 中 SECTION 的默认对齐
  3. Hi3516A开发--常用指令和根文件目录详解
  4. C语言再学习 -- 输入/输出
  5. hdu1232(简单并查集)
  6. 从分布式一致性算法到区块链共识机制
  7. Creating Your First Blockchain with Java. Part 1.
  8. 以太坊go-ethereum项目源码本地环境搭建
  9. java的flush方法_Java中的BufferedWriter flush()方法及示例
  10. 自媒体敏感词大全_2020年自媒体软件大全,这里真的有大宝贝……