图钉功能总算做出来了,发现真的是因为没认真看手册导致的=。=【跪

最后的代码很简单,但是过程中看了不少camera/tracker相关的东西,感觉需要整理记录一下

图钉功能记录:

目标:实现用ARCamera扫描处物体后点击图钉实现物体固定,AR扫描功能暂停(但是摄像头还是开启的)

实现预想:将摄像头上关于AR的脚本禁用,根据easyAR数据流,应该集中在ARCamera/CameraDevice/imagetracker这三个的behavior中:

首先看看,在预设体文件夹中先看下ARcamera的结构

其中

那接下去看看

ARCameraBaseBehaviour Class

它的描述是这样的:

ARCameraBaseBehaviour是在AR场景中控制ARCamera的component。

带有ARCameraBaseBehaviour的物体是RenderCamera的父节点,ARCamera和跟踪到的Target之间的相对位置 (transform)由EasyAR控制。

通过在FrameUpdate事件中过滤Target pose(从Frame中获取的TargetInstance的Rotation和Position)可以降低target抖动。

可以通过关闭 RenderReality 来禁止 camera 背景显示。

他的类中函数大概有这些:

几个重要函数的功能如下:

看了一下,有几个地方还是很有意思的。

后面这两个是让我们更加理解easyAR的工作原理的,好像并不能帮我们的达成目的,而这个RenderReality中“camera图像不会显示”打动了我。

那就试试看咯。

【手机忘记截图了】

反正测试的结果是点击图钉后,摄像机都关了,和我们的目标效果不一致,那就先放一边。

好像ARcamera就没什么看的了,那接下去看看cameradevice有没有什么可能达成目标的语句可以用:

CameraDeviceBaseBehaviour Class

CameraDeviceBaseBehaviour是在AR场景中控制CameraDevice的component。

CameraDevice工作在它自己的线程上。你可以Open/Close camera,也可以在任意时间关闭并重新开启一个不同的camera 设备或是设置不同的参数。

StartCapture/StopCapture用来开始和停止camera预览,这两个操作不会影响之前所设置的camera参数。camera的控制方法与系统API提供的方法类似。

CameraDevice是tracker以及其它算法的输入源。CameraDeviceBaseBehaviour包含AR链条的入口, OpenAndStart 。

从介绍上看就感觉很有希望啊!再往下瞅瞅:

这四个函数有意思啊,试试看呗:

【忘记截图again】

OpenAndStart()/Close()与StartCapture()/StopCapture()虽然实际上的后台效果是不一样的,

但是但从我们想要的目标测试出来的效果是一样的——点击图钉后,手机画面会停留在捕获的最后一帧上,仿佛静态画面。并不是目标效果。

那怎么办,只能试试看imagetracker 看看能不能取消跟踪吧——

ImageTracker实现了image target的检测和跟踪。

ImageTracker检测和跟踪 ImageTarget 。你需要首先调用 attachStreamer 将 FrameStreamer 连接至ImageTracker,然后 FrameStreamer 的输出图像将被tracker使用。

你可以通过start/stop来开始和停止跟踪。start和stop是非常轻量的调用。

在Target可以被ImageTracker跟踪之前,你需要通过异步方法loadTarget/unloadTarget或同步方法loadTargetBlocked/unloadTargetBlocked将它载入。

如果需要非阻塞的调用,推荐使用异步的接口。可以通过传入接口的回调来获取load/unload的结果。

还真的有!瞬间感动哭了,而且是非常轻量的调用,代码之神一定是看我傻乎乎的看了那么多不相关的东西没忍住给我答案了哈哈哈

最后还是没有图=。=

必须要说easyAR的文档手册写的还是很通俗易懂好操作的,学习学习!

所以就这么达到了目标。回想起来还是感觉被自己蠢哭了【尴尬】

继续努力吧

easyAR图钉功能实现相关的更多相关文章

  1. 操作PDF文档功能的相关开源项目探索——iTextSharp 和PDFBox

    原文 操作PDF文档功能的相关开源项目探索——iTextSharp 和PDFBox 很久没自己写写心得日志与大家分享了,一方面是自己有点忙,一方面是自己有点懒,没有及时总结.因为实践是经验的来源,总结 ...

  2. 【翻译】Tusdotnet中文文档(3)自定义功能和相关技术

    自定义功能和相关技术 本篇按照如下结构翻译 自定义功能 自定义数据仓库 相关技术 架构和总体概念 自定义数据仓库 tusdotnet附带一个存储库TusDiskStore,它将文件保存在磁盘上的一个目 ...

  3. Netsharp快速入门(之18) 平台常用功能(工作区相关)

    作者:秋时  转载须说明出处 第6章     平台功能 6.1     部件二次开发设置 6.1.1  工具栏管理 1.从单据二次开发-工具栏管理进入 2.主要设置显示,对应的方法名或设置权限相关操作 ...

  4. vi代码智能提示功能及相关配置

    vim是一款支持插件.功能无比强大的编辑器,无论你的系统是linux.unix.mac还是windows,都能够选择他来编辑文件或是进行工程级别 的coding.如果能把vim用好了,不仅编程效率能得 ...

  5. Burp Suite之截断代理功能及相关设置(一)

    Burpsuite 1.burpsuite 简介2.设置代理3.Target4.爬网模块5.扫描模块6.扩展模块7.intrude8.Repeater9.Sequencer10.Decoder11.C ...

  6. sqlserver2012的审计功能的相关理解

    1.sqlserver2012可以做实例的审计,以及数据库的审计,基本包括了所有的操作.可以符合我们的要求.   2.审计功能需要实例级别的配置数据库级别的配置,实例上建立“审核”,数据库上建立“数据 ...

  7. IOC功能以及相关的配置

    功能: 控制反转,将对象的创建权反转给Spring可以解决程序耦合性高的问题,大概的意思就是将程序运行时所需要的资源.数据,全部让Spring供给,防止程序与程序之间联系过高,而出现耦合性高的问题. ...

  8. NodeJS系列~第一个小例子,实现了request.querystring功能

    返回目录 百度百科上: Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始,在Node中,Http是首要的.Node为创建http服务器作了优化,所以在网上 ...

  9. 私有Pods封装个推SDK功能(解决方案)

    一:运用场景 公司中同时有好几个APP在开发,而且每个APP都有使用到集成个推SDK来处理消息的功能,以前的做法是每个APP都去集成并在AppDelegate处理一些SDK的代码,包含个推基础配置.消 ...

随机推荐

  1. Thinkphp中的内置标签用法

    Thinkphp中的内置标签有:Volist,Foreach,For,Switch,比较标签,范围判断标签,IF,Present,Empty,Defined,Assign,Define,标签嵌套,im ...

  2. js中的数组对象排序(方法sort()详细介绍)

    定义和用法 sort() 方法用于对数组的元素进行排序. 语法    arrayObject.sort(sortby) 参数sortby:可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注意 ...

  3. Css实现一个简单的幻灯片效果页面

    使用animation动画实现一个简单的幻灯片效果. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...

  4. mysql的my.ini文件详解

    mysql数据库在配置时包含很多信息:端口号,字符编码,指定根路径 basedir,指定数据存放的路径等信息 mysql的字体编码分为两种: 服务器编码 客户端输入的编码 通常服务器的编码都是utf- ...

  5. java设计模式综合项目实战视频教程

    java设计模式综合项目实战视频教程 视频课程目录如下: 第01节课:本课程整体内容介绍:X-gen系统概况,包括:引入.X-gen项目背景.X-gen的HelloWorld第02节课:X-gen整体 ...

  6. 增广拉格朗日乘子法(Augmented Lagrange Method)

    转载自:增广拉格朗日乘子法(Augmented Lagrange Method) 增广拉格朗日乘子法的作用是用来解决等式约束下的优化问题, 假定需要求解的问题如下: minimize f(X) s.t ...

  7. java的三大特性,封装,继承,多态

    封装 /** * 所谓封装,就是将对象具有的成员变量和成员函数包装和隐藏起来,让外界无法直接使用, * 被封装的成员只能通过某些特定的方式才能访问. * 实现封装有两个步骤: *   1.将不能暴露的 ...

  8. Java基础(3) -字符串

    字符串-String 1.定义&&初始化 使用双引号把字符括起来 String str = "test"; 2.字符串的提取-substring String a ...

  9. MyBatis基础

    一.大配置 <?xml version="1.0" encoding="UTF-8" ?> <!--文档类型,头文件--> <!D ...

  10. .NET平台的ORM分析工具

    众所周知,“ORM”和“性能问题”常常一起出现.ORM通过对开发人员隐藏SQL细节可以大大的提高生产力.然而,它们很容易产生一些未被发现的荒谬查询.通常情况下,数据库管理员可以通过交叉引用有问题的存储 ...