easyAR图钉功能实现相关

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

最后的代码很简单,但是过程中看了不少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的文档手册写的还是很通俗易懂好操作的,学习学习!

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

继续努力吧

原文地址:https://www.cnblogs.com/zyn95186/p/7280855.html