IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> ARCore之路:AugmentedImage 项目例子分析 -> 正文阅读

[游戏开发]ARCore之路:AugmentedImage 项目例子分析

项目效果

AugmentedImage

该项目是增强图像的例子,相机捕捉到数据库中的图像之后,将手机中显示的白色方框(下图左侧)对准图像,将会生成一个相框(下图右侧),该相框会根据图像的大小和位置,将图像包围住。
该相框会随着图像的移动而移动,紧紧跟随图像。

ARCore 最多可以同时跟踪 20 张图像,但 ARCore 不会同时检测或跟踪同一图像的多个实例,即相机捕捉到两张相同的图像,只会跟踪其中的一个。
在这里插入图片描述
下图是项目的节点,下面将分析各个节点的作用。
在这里插入图片描述

1、ARCore Device

该节点的详情可到此处了解:传送门
它需要ARCore会话配置文件中载入 AugmentedImage 数据库,如下图
在这里插入图片描述
那么如何创建 AugmentedImage 数据库呢?
选中需要识别的图像,图像的类型是 Default,然后右键选择 Create > Google ARCore > AugmentedImageDatabase
在这里插入图片描述
在这里插入图片描述
创建数据库成功后,点击数据库后如下图,Quality 是图片的质量分数,满分为100,最后使用评分为75以上的图像,该评分是根据图像中的特征点数量来决定了,特征点数量越多,评分越高。可以通过
Session.GetTrackables<AugmentedImage>(_tempAugmentedImages, TrackableQueryFilter.Updated);
来获得当前相机捕捉到的图像,该语句会将捕获到的图像存储到 _tempAugmentedImages 集合中。

在这里插入图片描述

2、ExampleController

当相机捕捉到数据库中的图像后,会根据图像的大小和位置生成相框,具体的代码实现请看下面的注释。

namespace GoogleARCore.Examples.AugmentedImage
{
    using System.Collections.Generic;
    using System.Runtime.InteropServices;
    using GoogleARCore;
    using UnityEngine;
    using UnityEngine.UI;

    public class AugmentedImageExampleController : MonoBehaviour
    {
        // 识别到 augmented images 后实例化的预制体
        public AugmentedImageVisualizer AugmentedImageVisualizerPrefab;

        // 一个 UI 界面
        public GameObject FitToScanOverlay;
        // augmented images 的编号与它相应相框模型的实例
        private Dictionary<int, AugmentedImageVisualizer> _visualizers
            = new Dictionary<int, AugmentedImageVisualizer>();

        // 存储 augmented images 的集合
        private List<AugmentedImage> _tempAugmentedImages = new List<AugmentedImage>();
        
        public void Awake()
        {
            Application.targetFrameRate = 60;	// 设为 60 帧
        }

        public void Update()
        {
            // 按了返回键则退出程序
            if (Input.GetKey(KeyCode.Escape))
                Application.Quit();

            // ARCore 正在进行追踪时,手机永不熄屏,没有在追踪时设置会原本的熄屏时间
            if (Session.Status != SessionStatus.Tracking)
                Screen.sleepTimeout = SleepTimeout.SystemSetting;
            else
                Screen.sleepTimeout = SleepTimeout.NeverSleep;

            // 获得当前帧中的 augmented images
            Session.GetTrackables<AugmentedImage>(
                _tempAugmentedImages, TrackableQueryFilter.Updated);

            foreach (var image in _tempAugmentedImages)
            {
                // AugmentedImageVisualizer 该脚本是挂载在相框中的
                AugmentedImageVisualizer visualizer = null;
                // 根据 augmented images 的编号 DatabaseIndex 获取对应的相框实例,将相框实例赋值到 visualizer
                _visualizers.TryGetValue(image.DatabaseIndex, out visualizer);
                // 如果当前的 image 是正在追踪的,且它是新识别到的 image,那么给它创建一个相框实例
                if (image.TrackingState == TrackingState.Tracking && visualizer == null)
                {
                    // 创建一个锚点以确保 ARCore 持续跟踪此增强图像
                    Anchor anchor = image.CreateAnchor(image.CenterPose);
                    // 实例化一个相框出来,并且它的父节点是上一条语句创建的锚点
                    visualizer = (AugmentedImageVisualizer)Instantiate(
                        AugmentedImageVisualizerPrefab, anchor.transform);
                    // 设置相框实例对应的 augmented images
                    visualizer.Image = image;
                    // 将 augmented images 的编号与相框实例绑定,添加到字典
                    _visualizers.Add(image.DatabaseIndex, visualizer);
                }
                else if (image.TrackingState == TrackingState.Stopped && visualizer != null)
                {
                    // 当前 augmented images 停止追踪了,那么从字典中删除它的 k-v,并 Destroy 该 image 的相框
                    _visualizers.Remove(image.DatabaseIndex);
                    GameObject.Destroy(visualizer.gameObject);
                }
            }

            // 如果当前有正在跟踪 augmented images ,那么就隐藏 UI界面 fit-to-scan overlay
            foreach (var visualizer in _visualizers.Values)
            {
                if (visualizer.Image.TrackingState == TrackingState.Tracking)
                {
                    FitToScanOverlay.SetActive(false);
                    return;
                }
            }

            FitToScanOverlay.SetActive(true);
        }
    }
}

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:26:54  更:2022-04-29 12:29:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:07:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码