实现主要参考:VuforiaAR物体空间定位(设备跟踪):http://blog.sina.com.cn/s/blog_8082aa610102x83i.html
高通 Vuforia SDK + Unity3D制作简易Android AR app :
https://tieba.baidu.com/p/5086865037?red_tag=0740748620&traceid=
使用高通 Vuforia SDK :http://www.cnblogs.com/mrmocha/p/9737448.html
EasyAR使用:https://www.easyar.cn/doc/EasyAR%20SDK/Getting%20Started/2.0/Setting-up-EasyAR-Unity-SDK.html
Easyar官方有一个关于模型的平移缩放的教程,点击查看,:
https://blog.csdn.net/qumoy/article/details/78228754
EasyAR开发技巧---模型交互操作:http://forum.easyar.cn/portal.php?mod=view&aid=5
脱卡:http://forum.easyar.cn/portal.php?mod=view&aid=28
在ARCamera下也添加一个模型,并设置这个模型在你相机下的位置大小等参数(这里各位开发者可以将模型大小和位置修改为一致)
AR SDK基本分为几个主要功能。
1)动作捕捉:使用手机的传感器和相机,ARCore可以准确感知手机的位置和姿态,并改变显示的虚拟物体的位置和姿态
2)环境感知:感知平面,比如你面前的桌子、地面,在虚拟空间中准确复现这个平面
3)光源感知:使用手机的环境光传感器,感知环境光照情况,对应调整虚拟物体的亮度、阴影和材质,让它看起来更融入环境。
目前市面上有三款比较主流的AR SDK能支持unity进行AR的开发。分别是Vuforia,ARcore和ARkit。
ARcore是谷歌公司研发的AR SDK,软件开发者现在就可以下载它去开发Android平台上的增强现实应用,或者为他们的App增加增强现实功能。ARcore支持动作捕捉,环境感知与光源感知。是一个比较完善的AR SDK。缺陷在于目前只支持谷歌手机以及新版的三星手机,能支持的手机不多,开发成本略高。
ARkit是苹果公司研发的AR SDK,同样也支持动作捕捉,环境感知与光源感知,支持ARKit的iOS设备为iPhone SE、iPhone6s、iPhone 6s Plus、iPhone 7、iPhone 7 Plus、iPad Pro (所有型号)、9.7英寸iPad(2017款)。缺点在于开发成本也相对昂贵,除了需要一部支持ARkit的设备以外,还需要一台支持苹果系统的电脑以及一个一年99美元的开发者账户。
Vuforia相对前几者而言相对简单,适合初级入门。它的原理其实就是图像识别,通过分析一张图片来确定一个平面,然后在这个平面上进行创作。不过目前暂不支持环境感知与光源感知,必须要通过特定的图片来识别平面,Vuforia的优势在于识别出来的平面相对而言比较稳定,只要摄像机能捕捉到有图片,那识别的平面基本不会出现抖动或者错位,这一点是环境感知暂时无法超越的地方。除此之外,Vuforia开发成本相对较低,并且支持大多数安卓系统。
EasyAR使用介绍:https://www.zhihu.com/question/35001692
于是老样子导入unity包进unity,发现image target的图片丢了,看了看文档,再想起之前用的是unity4.6版本,而这次是unity5 ,应该就是版本问题,果然换回unity4就没问题。
于是再次打包发布,这次不黑屏了,直接跳出字样是我的bundle id和appid不符,该了多遍未果,于是就上QQ群问,折腾了一遍,发现是bundle的填写格式问题,得把com.company.product在unity和bundle端填写一致,appid也是一样。
EasyAR从我的使用体验上来看,相对Vuforia等国外产品使用简单、编程友好,随着更新推进,现在文档相对比较完善,目前除了视频存在问题以外,整体非常满意,自定义识别图比Vuforia更人性化,如果从功能特性、深度定制这两个方面来说略显不足,因为代码封装比较彻底,这种需求采用原生开发会比较好点,跨平台、免费、无水印是亮点,国产AR引擎做到这样感觉非常不错了,因为阅读ARToolkit的代码感觉非常复杂,其次就是现在社区缺乏活力,感觉无论从官方还是开发者都比较沉闷,每次到论坛里都发现没有什么有价值的内容,基本不更新。
某位博主写的关于EasyAR的四篇博客,基本覆盖了现在EasyAR的功能,更多的内容请看文档和官方示例:
http://qinyuanpei.com/2015/10/30/have-a-taste-of-easyar-01.html
http://qinyuanpei.com/2015/11/03/have-a-taste-of-easyar-02.html
http://qinyuanpei.com/2015/12/09/have-a-taste-of-easyar-03.html
http://qinyuanpei.com/2015/12/09/have-a-taste-of-easyar-04.html
可以访问最后一个地址,进入博客以后,这几篇文章是以系列形式撰写的
使用easyAR
为了初始化 EasyAR SDK,需要先在网页系统中生成key
登录 www.easyar.cn ,点击 开发中心-License管理 ,添加License Key 。
填写的app name:
导入sdk后多出的文件
需要填app key(license生成的长key,复制):
Bundle ID
|
Bundle ID(iOS): com.Company.ARDesign PackageName (Android): com.Company.ARDesign SDK License Key: UiyP1RsCJfAy4HCDoDDLBzHvwbjwAWRmL5vjIM1OeWdlzIles9jL4NDL17PSYJGYgrcxWXmnpieecy8EFGX7OJCaRwGfOVAq1THCYEB0wWqqJBYoSY5Y0EU7EY8qOmzUwOVoi22dG3kVIofpjNHqLQVGiarpXRn4XC3cub0JL7cL3uBpdA6OMTJlTUc4VShlKFy2ufYY 注:该SDK License Key对应的SDK版本为2.x。请在项目工程中输入SDK License Key,SDK License Key必须和Bundle ID对应使用
|
我们在File中Build Setting之后点击Player Setting,选择对应的platform.
最后也是最关键的一部分,我们的Graphics API 使用的是OpenGLES2.如图:
Easyar:
高通有设备跟踪:
使用高通
支持包在File-Build setting的XR settings中可以下载
安装路径和引擎安装路径的Editor文件夹平级,否则fail to locate Unity.exe
高通文档:https://library.vuforia.com/content/vuforia-library/en/getting-started/overview.html
高通key:
AdVxRLL/AAABme1DxPOD7U/ThXafckcdIOIf1wbO6UHxUYn34bEigse8MNkkRPvugeNSuBt76X0pTUI/RJbVdSyjqCX3fh2tEbnir/W95IsQDFyfFzQTcL5ZFqOKFM1ORNGVAOB5OYymoCuNs+e+ES3pptf5nQv7CHCtdt2vBqV4wYRT4CZyx/6w82JgbwLCS4APs4lQ6h/83qgHkCZwKofaAGwL3mUMdRQkOp6jgE90rG+thJ7/Kmr8SdW2jQK7Bpz33faRynX8VJ3o7zTNmE7stCIcg6KhFHIrehunCTuCz/UYKe5WCaOlENBlUINrAQjLZghrEZlxaPJ+KiWiDwOqAQt0fKPJ9Nsto59WI2pGFqz8xp1sOEnY |
Plan Type: Develop Status: Active License UUID: 781a4c7065c34df093c42da582807dad Permissions:
History:
|
参考http://blog.sina.com.cn/s/blog_8082aa610102x83i.html
需要注意一点设备需要有陀螺仪
启动程序转动摄像头,我们会发现模型就固定现实场景的某个位置,不会固定在屏幕的某个位置。这就实现了物体空间定位的效果
报错
Exception in callback: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object at Vuforia.VuforiaManager.Update (ScreenOrientation counterRotation, System.Boolean& reapplyOldState) [0x00000] in <filename unknown>:0 at Vuforia.VuforiaARController.UpdateStatePrivate (Boolean forceUpdate, Boolean reapplyOldState) [0x00000] in <filename unknown>:0 at Vuforia.VuforiaARController.UpdateState (Boolean forceUpdate, Boolean reapplyOldState) [0x00000] in <filename unknown>:0 at Vuforia.DigitalEyewearARController.Update () [0x00000] in <filename unknown>:0 at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[],System.Exception&) at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x000d0] in /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222 --- End of inner exception stack trace --- at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x000eb] in /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:232 at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MethodBase.cs:115 at System.Delegate.DynamicInvokeImpl (System.Object[] args) [0x000b9] in /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Delegate.cs:443 at System.MulticastDelegate.DynamicInvokeImpl (System.Object[] args) [0x00018] in /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/MulticastDelegate.cs:71 at System.Delegate.DynamicInvoke (System.Object[] args) [0x00000] in /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Delegate.cs:415 at Vuforia.DelegateHelper.InvokeDelegate (System.Delegate action, System.Object[] args) [0x00000] in <filename unknown>:0 UnityEngine.Debug:LogError(Object) Vuforia.DelegateHelper:InvokeDele |
可能是误删(丢失了某个文件)尝试全部删除后重新导入
识别图片与其上物体的大小比例可能会影响效果
发现电脑中无法实现物体空间定位(可能是因为没有陀螺仪)但手机可以
注意需要定位的物体与ARCamera平级
识别(最后不需要)
参考高通文档:https://library.vuforia.com/content/vuforia-library/en/getting-started/overview.html
教程集合:http://www.arvrschool.com/read.php?tid=325&fid=21
Vuforia介绍 :https://www.cnblogs.com/mrmocha/p/9737448.html
1.相机的世界中心设置
a.SPECIFIC_TARGET:制定一个物体作为世界中心坐标
b.FIRST_TARGET:摄像机所照射到的第一个需要识别的目标为世界中心坐标
C.CAMERA:摄像机为世界中心的坐标
D.DEVICE_TRACKING:设备追踪(以我们设备正在追踪的物体为世界中心坐标)
警告(但无影响):
Vuforia Configuration "No webcam profile has been found" |