實現主要參考: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" |