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 ...
随机推荐
- 为何stop()和suspend()方法不推荐使用(转)
stop()方法作为一种粗暴的线程终止行为,在线程终止之前没有对其做任何的清除操作,因此具有固有的不安全性. 用Thread.stop()方法来终止线程将会释放该线程对象已经锁定的所有监视器.如果以前 ...
- java基础面试集结
1.hashMap实现原理及相关问题 :https://blog.csdn.net/h1130189083/article/details/78303865
- FFmpeg(二) 解封装相关函数理解
一.解封装基本流程 ①av_register_All()////初始化解封装,注册解析和封装的格式. ②avformat_netword_init()//初始化网络,解析rtsp协议 ③avforma ...
- vim设置golang语法高亮 (Centos)
Go语言自带vim 的语法高亮文件. http://www.golangtc.com/download 下载 go1.3.3.src.tar.gzgo1.3.3 (source only),解压缩 ...
- else块的用途
除了在if...else...中使用,else块还可以在for循环.while循环以及try...except中使用. 在for循环中使用: my_list = ['a','b','c','d'] f ...
- Cocos Creator 3D 打砖块教程(二) | 子弹发射与摄像机平滑移动
在线体验链接: http://example.creator-star.cn/block3d/ 前面一篇文章,我们讲了[打砖块]游戏中的3D物体的场景布局.材质资源.物理刚体与碰撞组件,接下来本篇文章 ...
- 手把手教你安装Eclipse最新版本的详细教程 - 大佬的鸡肋,菜鸟的盛宴(非常详细,非常实用)
简介 首先声明此篇文章主要是针对测试菜鸟或者刚刚入门的小伙们或者童鞋们,大佬就没有必要往下看了. 写这篇文章的由来是因为后边要用这个工具,但是由于某些原因有部分小伙伴和童鞋们可能不会安装此工具,为了方 ...
- e课表项目第二次冲刺周期第七天
昨天干了什么? 昨天我查找相关的资料实现对之前的信息连接数据库进行显示,完成修改的功能,并且返回到数据库当中.然后下午,我和我们小组的成员,讨论了第二个界面的具体功能和布局,我们一致同意,引用之前的第 ...
- js 判断对象是否为空
利用JSON.stringify var objData = {};JSON.stringify(objData) ==="{}" // true 第二种用原声js 方法 Obje ...
- Sql 六种约束
--1.主键约束问题 create table 学生表( 学号 int primary key, 姓名 varchar(10)); insert into 学生表 values(null,'a');问 ...