ARToolKit-unity
ARToolKit为开源的AR库,相对于高通和easyAr有几点特点:
1)开源
2)识别项目可以动态添加(详细在后)
3)识别文件可以本地生成
4)目前只能识别图片(目前为.jpg格式)
下边开始详细介绍:
1)下载sdk
可以自己搜索下载,也可以在Git上下载https://github.com/artoolkit/artoolkit5;解压打开如下图所示:

其中可以把unitypackage直接丢进unity中进行使用。导入后主要用到ARcontroller、ARMaker、AROrigin以及ARTrackedObject四个脚本。
2)AR初始化场景搭建
第一步,添加控制器
在场景中新建空的Gameobject,此游戏物体名称为ARToolKit(插件中自己名称,可更改),并添加脚本ARController;如下图所示:


坑点:第一个参数camera paramater默认为空,但是通过代码追踪进去,代码并没有进行赋值,导致中间参数获取不到(不得不说里面写的有点烂),如果不做处理,当搭建好环境以后运行会提示无法连接摄像头,如上右图所示。追踪进去发现其参数是为了获取Resources目录下的文件生成TextAsset实例,如下图所示,所以找到Resources下ardata目录下的文件,随便将一个文件的名字给它赋值既可以启动摄像头了(初步估计为一些开启不同摄像头的参数)

第二步,设置追踪设置追踪标记文件
在第一步中游戏物体上继续添加脚本ARMarker,通过这个脚本获取识别图像所需要的数据,如第一步第一张图所示,其中MarkerTag为此图像的标记(可以手动修改),通过标记进行识别追踪的物体,所以下一步需要脚本ARTrackedObject来设定追踪。
ARMarker中type参数选为NFT,表示识别图像的信息文件在StreamingAssets下名字为NFT Dataset Name的三个文件(后续会讲怎么生成)。如果想把路径改为其他,可在ARMarker脚本中查找StreamingAssets路径,把相关参数值进行修改
第三步,设置追踪目标
在场景中继续新建空游戏物体,取名称为Scene root,添加脚本AROrigin,此游戏物体坐标为原点(猜测跟识别后进行游戏物体定位有关),并将其层设定为特定值,比如插件默认的为ARBackground2(可继续使用)此层。在第三步新建游戏物体下新建子游戏物体(设置layer为设定的特定值),取名称为Marker scene,并挂载脚本ARTrackedObject,并把MarkerTag设置为与第二步中ARMarke的值一样,表示通过ARMarker识别此tracketobject;ARMarker与ARTrackedObject成对出现,可重复第二步和第三步进行重复设置不同的识别体。如下图所示,表示可分别对两个图像进行识别

至此,环境搭载结束,当识别到相应图像后处理如下所示(截图来自脚本ARTracketObject),如下代码分别对应当识别到物体,追踪物体以及追踪失败后对应的操作,当当识别到物体时,会对evetReceiver进行消息广播(即eventReceiver以及其子游戏物体脚本中的所有的OnMarkerFound方法触发),并对ARTracketObject所在的游戏物体下的子游戏物体进行激活。所以可以把识别的模型放在此游戏物体下,也可以新建游戏物体,添加脚本,脚本中添加一个OnMarkerFound方法,通过此方法进行一系列的后续操作。追踪物体以及追踪失败对应的运作与上述类似。

3)生成识别文件
此处文件即为ARMarker对应的文件也是生成名为NFT Dataset Name识别文件。
将要识别的jpg文件拖到第一步中getTexData.exe上,按步骤分别输入特征点的级别以及最大最小分辨率即可,getTexData.exe所在目录:arunity5-master\arunity5-master\bin。通过此操所会生成三个后缀为fset、iset和fset3的文件,将这三个文件放在StreamingAssets目录下或者修改后的目录下即可。
PS:由于可以通过程序添加ARMarker和ARTRackerObject,可以具有较高的灵活性,可以方便的进行各种设置。但是,在程序运行过程中,不管是停掉AR模块进行添加还是UnLoad掉相关参数添加都会导致程序跳掉,但是首次添加不会存在此问题,所以每次更改可以通过加载场景的方式跳过此bug
ARToolKit-unity的更多相关文章
- 本人AI知识体系导航 - AI menu
Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯 徐亦达老板 Dirichlet Process 学习 ...
- ARToolKit for Unity环境搭建(初步搭建成功)
最近一段时间才开始学习使用Unity3d,AR的学习使用中,先后使用了metaio SDK.vuforia SDK,但由于这两个都属于收费的,今天开始尝试使用ARToolKit.先将ARToolKit ...
- [Artoolkit] ARSimpleNativeCarsProj for Multi Markers Tracking
效果简直了,但代码架构有点坑,慢慢道来. libc++_shared.so应该是c++的库:libARWrapperNativeCaresExample.so也有对应的c++文件:那么,libARWr ...
- 【AR实验室】ARToolKit之制作自己的Marker/NFT
0x00 - 前言 看过example后,就会想自己动动手,这里改改那里修修.我们先试着添加自己喜欢的marker/nft进行识别. 比如我做了一个法拉利的marker: 还有网上找了一个法拉利log ...
- 【AR实验室】ARToolKit之Example篇
0x00 - 前言 PS : 我突然意识到ARToolKit本质可能就是一个可以实时求解相机内外参的解决方案. 拿到一个新的SDK,90%的人应该都会先跑一下Example.拿到ARToolKit的S ...
- 【AR实验室】ARToolKit之概述篇
0x00 - 前言 我从去年就开始对AR(Augmented Reality)技术比较关注,但是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual ...
- Unity3d入门 - 关于unity工具的熟悉
上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...
- 聊聊Unity项目管理的那些事:Git-flow和Unity
0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了.敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理.项目从最初使用svn到之后的Git One Track策略再到现在的GitFlo ...
- Unity游戏内版本更新
最近研究了一下游戏内apk包更新的方法. ios对于应用的管理比较严格,除非热更新脚本,不太可能做到端内大版本包的更新.然而安卓端则没有此限制.因此可以做到不跳到网页或应用商店,就覆盖更新apk包. ...
- Unity 序列化
Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs ...
随机推荐
- Postman 之 HTTP Multipart/form-data 调试
无论是前端,还是后端开发,HTTP 接口的使用率实在是太高了.开发好了特定的 HTTP 接口,没有一个好的测试工具,怎么可以呢? 而 Postman 就是一款好用的爱不释手的测试工具,谁用谁说爽. 接 ...
- 使用path监听指定文件系统的变化
在以前的JAVA版本中,如果程序需要检测文件的变化,那么需要开辟一个线程每隔一段时间去遍历一次指定的目录,如果发现此次遍历结果和上次不同,那么就认为文件变动了 ,这样的方式非常繁琐,JAVA 7之后的 ...
- 23种设计模式之观察者模式(Observer Pattern)
观察者模式(Observer Pattern):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象,这个主题对象在状态发生变化时,会通知所有观察者.当一个对象改变需要同时改变其他对象, ...
- thymeleaf 设置display样式
使用th:style标签: th:style="'display:' + @{(${value} ? 'none' : 'inline-block')} + ''" 其中value ...
- jq 加载的几种方法
jQuery加载的几种方式 //①页面加载完之前执行,与嵌入的js加载方式一样 (function ($) { alert('start'); })(jquery); //②页面加载后执行 $ ...
- mysql库复制
一.使用navicate复制mysql库 二.使用命令 通过命令:1.创建新数据库CREATE DATABASE `newdb` DEFAULT CHARACTER SET UTF8 COLLATE ...
- TinyXML2的快速实践
最近遇到个需要在C++中处理XML文件的需求,虽然对此方面并不是很熟,但好在有GitHub上的awesome-cpp项目的帮助,还是收获了足够的相关知识. 类库 常用的或被推荐的XML类库有以下数个选 ...
- 刷新:重新发现.NET与未来
微软在比尔·盖茨手中创立并崛起, 成为PC互联网时代的霸主,很多70,80后都有MVP Ediwang的体验: 当时的微软对我来说就是神的存在.因为我认识电脑到使用电脑的一切几乎都离不开这家伟大的公司 ...
- 重构网页过程中的小tips
1.display为inline-block的元素可以使用virtical-align:middle来使得元素垂直居中对齐 2.在一些按钮标签或者mark标签中,如果文本内容确定不会改变长度的话,可以 ...
- 2019滴滴java面试总结 (包含面试题解析)
2019滴滴java面试总结 (包含面试题) 本人6年开发经验.今年年初找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.滴滴等公司offer,岗位是既有php也有Java后端开发,最终选择去了滴滴 ...