Vuforia自定義識別/動態生成識別圖的簡單操作步驟

利用自定義識別可以不用上傳圖片到Vuforia官網,也可以動態生成/修改識別圖來達到在本地修改識別圖的目的。

利用Vuforia進行自定義圖片的識別(自定義識別是不支持虛擬按鍵的)

1.新建工程並將Vuforia插件導入Unity

2.因爲是自定義識別圖,不用將圖片上傳到官網,也就不用下載相應的圖片數據包

3.將原始場景中的MainCamera刪除,並拖入vuforia預製件中的ARCameraImageTargetUserDefinedTargetBuilder拖入

4.導一個模型進去並放到ImageTarget下面...

 

5.在ARCamera下面的VuforiaBehaviour下點擊OpenVuforiaConfiguration,輸入LicenseKey,然後將ImageTarget的類型設置爲UserDefined

 

6.寫腳本,這裏腳本名字叫做UDTTest,掛到UserDefinedTargetBuilder下,然後將UserDefinedTargetBuilder腳本的Start scanning auto勾上,表示開啓自動掃描

這個腳本,需要用到Vuforia命名空間, System.Linq命名空間,需要實現接口

IUserDefinedTargetEventHandler,具體代碼框架如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using Vuforia;


public class UDTTest : MonoBehaviour,IUserDefinedTargetEventHandler
{
    ObjectTracker m_objectTracker;
    DataSet m_BuildDataSet;
    ImageTargetBuilder.FrameQuality m_FrameQuality;
    public int m_TargetCounter;
    public ImageTargetBehaviour ImageTargetTemplate;
    UserDefinedTargetBuildingBehaviour m_TargetBuildingBehaviour;
// Use this for initialization
void Start () {

        m_TargetBuildingBehaviour = this.GetComponent<UserDefinedTargetBuildingBehaviour>();  
        if (m_TargetBuildingBehaviour!=null)  
        {  
            m_TargetBuildingBehaviour.RegisterEventHandler(this);  
        }  
}

// Update is called once per frame
void Update () {

}


    public void OnFrameQualityChanged(ImageTargetBuilder.FrameQuality frameQuality)
    {
        m_FrameQuality = frameQuality;
        if (m_FrameQuality == ImageTargetBuilder.FrameQuality.FRAME_QUALITY_LOW)
        {
            Debug.Log("Low Camera Image Quality ");
        }  
    }


    public void OnInitialized()
    {
         m_objectTracker = TrackerManager.Instance.GetTracker<ObjectTracker>();  
         if (m_objectTracker != null)  
         {  
             m_BuildDataSet = m_objectTracker.CreateDataSet();  
             m_objectTracker.ActivateDataSet(m_BuildDataSet);    //激活數據集  
         }  
    }


    public void OnNewTrackableSource(TrackableSource trackableSource)
    {
        m_objectTracker.Stop();  //停止追蹤才能激活數據集  
        m_TargetCounter++;  
        m_objectTracker.DeactivateDataSet(m_BuildDataSet);//創建一個新的數據集  
        //如果trackable滿了或者已經定義了5個識別對象,那麼刪除舊的DataSet  
        if (m_BuildDataSet.HasReachedTrackableLimit() || m_BuildDataSet.GetTrackables().Count() > 5)  
        {  
            IEnumerable<Trackable> trackables = m_BuildDataSet.GetTrackables();  
            Trackable oldest = null;  
            foreach (Trackable trackable in trackables)  
            {  
                if (oldest ==null  || trackable.ID < oldest.ID)  
                {  
                    oldest = trackable;  
                }  
           }  
  
           if (oldest != null)  
           {  
               m_BuildDataSet.Destroy(oldest, true);  
           }  
       }  
  
  
       //定義Trackable並實例化  
        ImageTargetBehaviour imageTargetCopy = Instantiate(ImageTargetTemplate);
           //Instantiate<ImageTargetBehaviour>()(ImageTargetTemplate);  
       imageTargetCopy.gameObject.name = "UserDefinedTarget-" + m_TargetCounter;  
       //複製一個Trckable到imageTargetCopy上並讓它激活  
       m_BuildDataSet.CreateTrackable(trackableSource, imageTargetCopy.gameObject);  
       m_objectTracker.ActivateDataSet(m_BuildDataSet);  
       m_objectTracker.Start();    
    }    


    public void OnBuildButtonClick()  
    {  
        m_TargetBuildingBehaviour.BuildNewTarget("Test2", 50);  

    } 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章