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 ...
随机推荐
- layui-table与layui-rate评分转换成星级的使用
需求:将layui-table中的某一列,例如:评分,从数据库中查找出来之后,进行layui-rate评分转换显示效果,为星星.显示效果如下: 实现代码: 1.layui中引入rate 2.table ...
- idea springBoot 配置devtools实现热部署
1.pom文件依赖引入 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...
- CSS3相关编码规范
一.CSS书写顺序 1.位置属性(position, top, right, z-index, display, float等)2.大小(width, height, padding, margin) ...
- PHP 通过 ReflectionMethod 反射类方法获取注释返回 false 的问题解决
php 通过反射 ReflectionMethod 类来获取类方法的相关信息,其中就包含方法的注释内容. 问题描述 在公司测试环境运行以下代码,如果是 cli 命令行模式运行,正常输出代码注释.如果是 ...
- JSON说明
1. JSON 数据的书写格式 对象:是一个无序的“‘名称/值’对”集合.一个对象以“{”(左括号)开始,“}”(右括号)结束.每个“名称”后跟一个“:”(冒号):“‘名称/值’ 对”之间使用“,”( ...
- Vim升华之树形目录插件NERDTree安装图解(ubuntu)
此文经验证:为真 http://www.linuxidc.com/Linux/2013-06/86048.htm
- ssm配置文件
mybatis配置文件SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8"?> <!DO ...
- Lab_0操作系统实验准备(全)
一.实验介绍 实验目的: 知识储备: 二.相关下载 1.下载镜像文件 这个镜像文件是vdi类型的,只能用visualbox下载 链接:https://pan.baidu.com/s/1L7WX6ju4 ...
- cocos2d-x 系统学习cocos(1)
简析HelloWorld场景 以前使用cocos2d-x 3.14的时候,HelloWorld并不是一个场景类,而是一个图层类,当时的HelloWorld::createScene()是长这样的 Sc ...
- IMongoQuery的使用-C#
一.Mongodb的IMongoQuery的使用 引用命名空间:MongoDB.Driver;MongoDB.Driver.Builders; Query.All("name", ...