2018正版葡京赌侠诗A奇骏 For Unity3D之HiA奔驰G级分析

 前言

有关A纳瓦拉和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

雷蛇摄像头(硬件),录制头支架

 制作识别图集

一. 在SDK的军管后台创立1个新应用,获取使用的AppkeySecret,在Unity中会用到。

二. 在SDK的管理后苏州创立图集,并添加图片,达成今后公布图集

3. 把图集和行使进行关联

四. 在SDK的管理后巴尔的摩下载地面识别包文件,1般是以图集为命名的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文件

2018正版葡京赌侠诗,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>

三10人key值文件名的db文件

某种格式的公文,从里边能够见到HiScene A奥迪Q5 Key,预计db中储存了图片的识别点数据

图集中每一个图片有对应的3个db文件,可见此db文件必然和图纸有关联关系。

 示例分析

 不难识别

此情此景层次(Hierarchy)结构:
2018正版葡京赌侠诗 1

HiAR Camera (SDK的主导,绑定了五个本子:HiAREngineBehaviour,TargetManagerBehaviour)

​  camera (3D相机,渲染3D
GameObject,绑定的本子:HiA奥迪Q5CameraBehaviour)

Imager Target (识别点,能够有八个,绑定的剧本:ImageTargetBehaviour,达成这多少个接口ITrackable伊夫ntHandler,
ILoadBundle伊夫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)

2018正版葡京赌侠诗 2

camera background (二D相机,Clear
Flags为Solid Clear,渲染物体录像头拍戏的镜头)

2018正版葡京赌侠诗 3

录像头拍录的图像浮未来camera source(mesh renderer)上

摄像头拍戏的真实画面和斯特林发动机生成的三个维度物体实行叠加。

 AEvoque识别成功的使用

当识别图识别成功之后,执行一些操作,能够知道为Callback。

HiARubicon的事例是:识别成功之后,播放录制。

理所当然你能够在辨别成功之后,生成1些模型和情景出来,那样就和开发其余娱乐一样,能够对Scene中的GameObject进行支配,比如播放动画,互殴,特效之类的。

 涂涂乐

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

  1. 添加八个待涂包的模子,添加组件:HiARPaintShader:HiARPaint

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

  3. 据说识别到的图,提取图像生成Material,动态地渲染。

  4. 时期会变卦多少个识别点

进程中假若有摄像到其它实体,新生成的材料会实时更新

多图识别

多图识别,正是在简短识其他基础上添加八个ImageTarget

步骤:

  1. 在HiA福特Explorer 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之后,带有大体引擎功效的物体运动就有了宗旨点。

发表评论

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