《图说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———————-



如有问题,请留言!!

非常感谢!

《图说VR入门》——DeepoonVR的大鹏(陀螺仪)枪的更多相关文章

  1. 《图说VR入门》——入门汇总

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

  2. 《图说VR入门》——360全景视频

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

  3. 《图说VR入门》——Unity插件DK2使用教程

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

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

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

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

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

  6. 《图说VR入门》——googleVR入门代码分析

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

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

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

  8. 《VR入门系列教程》之3---运动追踪与输入设备

    运动追踪设备    第二种可以使人脑相信它真实处于虚拟世界的关键技术就是运动追踪技术,它可以通过追踪头部的运动状态实时更新渲染的场景.这与我们在真实世界中观看周围非常类似.    高速的惯性测量单元( ...

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

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

随机推荐

  1. SurfaceView获取本地视频播放

    1.定义 可以直接从内存或者DMA等硬件接口取得图像数据,是个非常重要的绘图容器. 它的特性是:可以在主线程之外的线程中向屏幕绘图上.这样可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应 ...

  2. Flutter 修改TextField的高度,以及无边框圆角

    修改TextField的高度可以通过decoration: InputDecoration的contentPadding进行修改,代码如下 new TextField( decoration: Inp ...

  3. 浅谈文档协作在工程设计中的应用——共享excel计算书

    我们设计过程中大量采用excel计算书,因为很多经典的计算都可以用excel解决,最最基本的就是工程量计算啦.稍微复杂的比如钢管计算,埋地钢管结构计算,顶管计算,水力学计算,波浪爬高计算,堤防高程计算 ...

  4. 使用ADB无线连接Android真机进行调试

    使用ADB无线连接Android真机进行调试   其实这已经是一个很古老的知识了,记录一下备忘. 准备工作 手机和电脑需要在同一个局域网内 电脑上已经安装好ADB工具,可以是Mac或者Windows ...

  5. org.postgresql.util.PSQLException: 栏位索引超过许可范围:3,栏位数:2。

    org.postgresql.util.PSQLException: 栏位索引超过许可范围:3,栏位数:2. 今天在写完SQL进行查询的时候,后台一直报错显示上面的信息.看错误完全不知道原因,就重新检 ...

  6. Mongodb集群与分片 2

    前面我们介绍了简单的集群配置实例.在简单实例中,虽然MongoDB auto-Sharding解决了海量存储问题,和动态扩容问题,但是离我们在真实环境下面所需要的高可靠性和高可用性还有一定的距离. 下 ...

  7. PHP将Base64图片转换为本地图片并保存

    本文出至:新太潮流网络博客 /** * [将Base64图片转换为本地图片并保存] * @E-mial wuliqiang_aa@163.com * @TIME 2017-04-07 * @WEB h ...

  8. MySQl新特性 GTID

    GTID简介 概念 全局事务标识符(GTID)是创建的唯一标识符,并与在源(主)服务器上提交的每个事务相关联.此标识符不但是唯一的,而且在给定复制设置中的所有服务器上都是唯一的.所有交易和所有GTID ...

  9. Go 在 TiDB 的实践

    https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/79215751 更多TiDB链接: https://my.oschina.net/z ...

  10. cut切割,简单的取列

    cut 切割,简单的取列命令. -d 指定分隔符 -f 数字 取第几列 -c n-m 取n列到m列字符. //提取字符,不常用 例如:已知bqh.txt文件里的内容为“I am bqh myqq is ...