《图说VR入门》——DeepoonVR的大鹏(陀螺仪)枪
《图说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的大鹏(陀螺仪)枪的更多相关文章
- 《图说VR入门》——入门汇总
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53818922 作者:car ...
- 《图说VR入门》——360全景视频
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53674647 作者:car ...
- 《图说VR入门》——Unity插件DK2使用教程
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53339254 作者:car ...
- 《图说VR入门》——googleVR 他山之玉
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53125482 作者:car ...
- 《图说VR入门》——DK2入门及其资源汇总
本文章由cartzhang编写,转载请注明出处. 全部权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53174895 作者:car ...
- 《图说VR入门》——googleVR入门代码分析
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53013843 作者:car ...
- 《图说VR入门》——googleVR入门
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/52959035 作者:car ...
- 《VR入门系列教程》之3---运动追踪与输入设备
运动追踪设备 第二种可以使人脑相信它真实处于虚拟世界的关键技术就是运动追踪技术,它可以通过追踪头部的运动状态实时更新渲染的场景.这与我们在真实世界中观看周围非常类似. 高速的惯性测量单元( ...
- 《VR入门系列教程》之2---VR头显
什么是虚拟现实? 虚拟现实的目标:让人们相信真实地处于一个虚拟世界中.要达到这个目标就得让人们的大脑(负责视觉和运动感知部分)欺骗他们.不同技术合在一起才可以创造这种幻觉,包括: 全立 ...
随机推荐
- Express使用Https服务器
var fs = require('fs'); var http = require('http'); var https = require('https'); var privateKey = f ...
- Expo大作战(七)--expo如何使用Genymotion模拟器
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,将全部来与官网 我猜去全部机翻+个人 ...
- [Android] Linux下JNI简单实现过程
大概梳理了一下JNI的过程: start->先写好A.java文件,里面添加native方法B,调用库C.so->编译成.class文件->用javac生成.h文件,文件包含Java ...
- fastclick select 闪退 bug
这时候needsclick就派上用场了 <select class='needsclick'></select> 附上fastclick github上的链接
- CSS 小结笔记之图标字体(IconFont)
本篇主要介绍一种非常好用的图标大法——图标字体(IconFont). 什么是图标字体?顾名思义,它是一种字体,只不过这个字体显示的并不是具体的文字之类的,而是各种图标. 网站上经常会用到各种图标,之前 ...
- .NET Dispose模式的实现
以下是代码: /// <summary> /// Dispose Pattern /// </summary> /// <remarks> /// 由逻辑可知: / ...
- c#WebApi使用form表单提交excel,实现批量写入数据库
思路:用户点击下载模板按钮,获取到excel模板,然后向里面填写数据保存.from表单提交的时候选择保存好的excel,实现数据的批量导入过程 先把模板放在服务器的项目目录下面:如 模板我一般放在:F ...
- SQL Server中ORDER BY后面可以是表达式和子查询
假如SQL Server数据库中现在有Book表如下 CREATE TABLE [dbo].[Book]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [CreateTi ...
- orcle 如何快速插入百万千万条数据
有时候做实验测试数据用到大量数据时可以用以下方法插入: 方法一:使用xmltable create table bqh8 as select rownum as id from xmltable('1 ...
- django -- uwsgi+nginx部署
一. 安装nginx How To Install Nginx on CentOS 7 添加epel扩展仓 sudo yum install epel-release 安装Nginx yum inst ...