前言

至于AR和Unity的基础知识,请自行去各自的文档中央举办大规模。

本文为国产的HiAR SDK啊例,日后拿尝试高通的vuforia SDK

 我之条件

基于Hi AR1.2.0 ( hiar_sdk_unity_20160809_v1.2.0_3c0e908.zip
 ( 47.4 MB )  )

Unity3D 5.3.5f1 x64

Windows 7 x64

异极视频头(硬件),录像头支架

 制作识别图集

1. 以SDK的管住后台创设一个初用,获取使用之AppkeySecret,在Unity中会就此到。

2. 以SDK的管制后台受开创图集,并加加图,完成后发布图集

3. 将图集和以举办关联

4. 以SDK的保管后布里Stowe下载本地识别包文件,一般是以图集为命名的unitypackage文件

 导入识别图集到Unity

自身创设的图集名称:xxdata

图集中暴发以下简单张图:

  • battleboard.png

  • card.png

下载的当地识别包文件(xxdata.unitypackage),在导入到Unity中之文书如下:

Editor
    HiAR
        ImageTargetTextures
            xxdata
                battleboard.png
                card.png
StreamingAssets
    HiAR
        xxdata.xml (里面是图集中的图片信息,一行是一张图片的数据,Key值是一个32位字符串)
        xxdata
            792c5ed97942d50f185be13ed9822b3c.db(32位的key和xxdata中对应)
            22b72d7e5b182ed15e9ede20268d8a6b.db

总结一下纵是:

1. 在Editor\ImageTargetTextures\下有为祈求集命名的文书夹,文件夹着发出祈求集中的图文件

2. 在StreamingAssets\HiAR\目下发出以图集命名的xml文件希冀集命名的文本夹,文件夹下发出图片Id命名的db文件

xxdata.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<HiAR>
  <KeyItemList>
    <KeyItem name="card" targetID="22b72d7e5b182ed15e9ede20268d8a6b" width="535" height="528" extName=".png" version="1.2.0"></KeyItem>
    <KeyItem name="battleboard" targetID="792c5ed97942d50f185be13ed9822b3c" width="1024" height="1024" extName=".jpg" version="1.2.0"></KeyItem>
  </KeyItemList>
</HiAR>

32位key值文件称之db文件

某种格式的文书,从内部可以寓目HiScene AR Key,预计db中存储了图的识别点数据

希冀集中每个图片发对应的一个db文件,可精晓这db文件必然与图表有关统一关系。

 示例分析

 简单识别

此情此景层次(Hierarchy)结构:
图片 1

HiAR Camera (SDK的主导,绑定了个别独剧本:HiAREngineBehaviour,TargetManagerBehaviour)

​  camera (3D相机,渲染3D
GameObject,绑定的台本:HiARCameraBehaviour)

Imager Target (识别点,可以爆发多单,绑定的剧本:ImageTargetBehaviour,实现就八只接口ITrackable伊芙(Eve)ntHandler,
ILoadBundle伊芙(Eve)ntHandler, IRelativeMoveTarget)


 识别成功:鉴别图移动时仍旧来遮挡时,Transform的特性会发生转移,并且ImageTarget下的Child会显示

​  识别战败:Transform属性无别,并且ImageTarget下之Child会隐藏

camera source (一个MeshRenderer,硬件录像头拍到的图像实时渲染在这些(类似于render texture?))

camera background (2D相机,渲染camera source的图形)

要表达:

 camera (3D相机 Clear Flags为Depth,拍摄场景被的3D GameObject)

图片 2

camera background (2D相机,Clear
Flags为Solid Clear,渲染物体视频头拍之画面)

图片 3

录像头拍之图像显示在camera source(mesh renderer)上

视频头拍之真人真事画面及发动机生成的老三维体进行叠加。

 AR识别成功之运用

当识别图识别成功未来,执行有操作,可以了然也Callback。

HiAR的事例是:识别成功将来,播放视频。

理所当然你得当辨别成功后,生成有型与场景下,这样即使和付出外娱乐一样,可以对Scene中之GameObject进行支配,比如播放动画,打斗,特效之类的。

 涂涂乐

将识别图上的图像实时渲染在模型上(Material),类型涂鸦。

  1. 加上一个亟需上包之模子,添加组件:HiARPaintShader:HiARPaint

  2. 硬件录像头拍摄识别图(实时拍摄)

  3. 按照识别及之觊觎,提取图像生成Material,动态地渲染。

  4. 期间会合变几单认识别点

过程被一旦生拍照及其余物体,新生成的材质会实时更新

基本上图识别

差不多图识别,就是以简要识其它基础及补偿加多单ImageTarget

步骤:

  1. 当HiAR Camera(HiAREngine组件) 的特性面板勾选 MuiltTarget
  2. 在场馆被补充加三只ImageTarget,并也各一个ImageTarget选取识别图

动态加载

动态加载识别目的展开甄别跟踪的效率,继承自TartgetDynamic

    void OnGUI()
    {
        if (GUI.Button(new Rect(30, 30, 200, 80), "Add Key"))
        {
            AddImageTarget(System.IO.Path.Combine(Application.streamingAssetsPath, Pic1Path), Pic1Key, 1024, 1024);
        }
    }

    //识别回调
    public override void OnDynamicReco(RecoResult recoResult)
    {
        Debug.Log("识别成功。。。。。");
        GameObject gameObject = null;
        gameObject = new GameObject();
        if (recoResult.keyType == KeyType.IMAGE)
        {
            gameObject.AddComponent<ImageTargetBehaviour>();
        }
        Debug.LogFormat("recoResult.keyType:{0}", recoResult.keyType);
        Target target = gameObject.GetComponent<Target>();
        if (target == null)
        {
            Debug.LogError("Get Target Null !");
            return;
        }
        target.PixelWidth = recoResult.Width * 0.01f;
        target.PixelHeight = recoResult.Height * 0.01f;
        gameObject.transform.parent = transform.parent;
        gameObject.SetActive(true);

        if (recoResult.KeyId.Equals(Pic1Key))
        {
            GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            cube.transform.parent = gameObject.transform;
            cube.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);
        }
        else
        {
            Debug.LogErrorFormat("recoResult.KeyId:{0} not equals :{1}", recoResult.KeyId, Pic1Key);
        }
        bindingGameObject(gameObject, recoResult.KeyId);
    }

安主题点

勾选 ImageTarget
(ImageTargetBehaviour组件)的CenterPoint之后,带有物理引擎效能的物体运动虽发出了主题点。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图