Guest User

Image Tracker with ZED and MAXST

a guest
Oct 8th, 2019
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.04 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using maxstAR;
  5. using HelperScripts;
  6.  
  7. public class ImageTrackerZedMAXST : ARBehaviour
  8. {
  9.     [SerializeField]
  10.     private RenderTexture camRendTex;
  11.     private Texture2D camTex;
  12.  
  13.     public bool horiFlip = false;
  14.     public bool vertFlip = false;
  15.  
  16.  
  17.     private Dictionary<string, ImageTrackableBehaviour> imageTrackablesMap =
  18.     new Dictionary<string, ImageTrackableBehaviour>();
  19.  
  20.     private CameraBackgroundBehaviour cameraBackgroundBehaviour = null;
  21.  
  22.     private void Awake()
  23.     {
  24.         Init();
  25.  
  26.         cameraBackgroundBehaviour = FindObjectOfType<CameraBackgroundBehaviour>();
  27.         camTex = new Texture2D(camRendTex.width, camRendTex.height, TextureFormat.RGBA32, false);
  28.     }
  29.  
  30.     // Start is called before the first frame update
  31.     void Start()
  32.     {
  33.         QualitySettings.vSyncCount = 0;
  34.         //Application.targetFrameRate = 60;
  35.  
  36.         imageTrackablesMap.Clear();
  37.         ImageTrackableBehaviour[] imageTrackables = FindObjectsOfType<ImageTrackableBehaviour>();
  38.         foreach (var trackable in imageTrackables)
  39.         {
  40.             imageTrackablesMap.Add(trackable.TrackableName, trackable);
  41.             Debug.Log("Trackable add: " + trackable.TrackableName);
  42.         }
  43.  
  44.         AddTrackerData();
  45.         TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_IMAGE);        
  46.  
  47.         CameraDevice.GetInstance().FlipVideo(CameraDevice.FlipDirection.HORIZONTAL, horiFlip);
  48.         CameraDevice.GetInstance().FlipVideo(CameraDevice.FlipDirection.VERTICAL, vertFlip);
  49.     }
  50.  
  51.     // Update is called once per frame
  52.     void Update()
  53.     {
  54.  
  55.         CameraDevice.GetInstance().FlipVideo(CameraDevice.FlipDirection.HORIZONTAL, horiFlip);
  56.         CameraDevice.GetInstance().FlipVideo(CameraDevice.FlipDirection.VERTICAL, vertFlip);
  57.  
  58.         DisableAllTrackables();
  59.  
  60.         TextureScale.RenderToTexture(camRendTex, ref camTex);
  61.         CameraDevice.GetInstance().SetNewFrame(camTex.GetRawTextureData(), camTex.GetRawTextureData().Length, camTex.width, camTex.height, ColorFormat.RGBA8888);
  62.  
  63.         TrackingState state = TrackerManager.GetInstance().UpdateTrackingState();
  64.  
  65.         if (state == null)
  66.         {
  67.             return;
  68.         }
  69.  
  70.         cameraBackgroundBehaviour.UpdateCameraBackgroundImage(state);        
  71.  
  72.         TrackingResult trackingResult = state.GetTrackingResult();
  73.         for (int i = 0; i < trackingResult.GetCount(); i++)
  74.         {
  75.             Debug.Log(i);
  76.             Trackable trackable = trackingResult.GetTrackable(i);
  77.             imageTrackablesMap[trackable.GetName()].OnTrackSuccess(
  78.                 trackable.GetId(), trackable.GetName(), trackable.GetPose());
  79.         }
  80.     }
  81.  
  82.     private void AddTrackerData()
  83.     {
  84.         foreach (var trackable in imageTrackablesMap)
  85.         {
  86.             if (trackable.Value.TrackerDataFileName.Length == 0)
  87.             {
  88.                 continue;
  89.             }
  90.  
  91.             if (trackable.Value.StorageType == StorageType.AbsolutePath)
  92.             {
  93.                 TrackerManager.GetInstance().AddTrackerData(trackable.Value.TrackerDataFileName);
  94.                 TrackerManager.GetInstance().LoadTrackerData();
  95.             }
  96.             else if(trackable.Value.StorageType == StorageType.StreamingAssets)
  97.             {
  98.                 if (Application.platform == RuntimePlatform.Android)
  99.                 {
  100.                     StartCoroutine(MaxstARUtil.ExtractAssets(trackable.Value.TrackerDataFileName, (filePath) =>
  101.                     {
  102.                         TrackerManager.GetInstance().AddTrackerData(filePath, false);
  103.                         TrackerManager.GetInstance().LoadTrackerData();
  104.                     }));
  105.                 }
  106.                 else
  107.                 {
  108.                     TrackerManager.GetInstance().AddTrackerData(Application.streamingAssetsPath + "/" + trackable.Value.TrackerDataFileName);
  109.                     TrackerManager.GetInstance().LoadTrackerData();
  110.                 }
  111.             }
  112.         }
  113.     }
  114.  
  115.     private void DisableAllTrackables()
  116.     {
  117.         foreach (var trackable in imageTrackablesMap)
  118.         {
  119.             trackable.Value.OnTrackFail();
  120.         }
  121.     }
  122.    
  123.     public void SetNormalMode()
  124.     {
  125.         TrackerManager.GetInstance().SetTrackingOption(TrackerManager.TrackingOption.NORMAL_TRACKING);
  126.     }
  127.  
  128.     public void SetExtendedMode()
  129.     {
  130.         TrackerManager.GetInstance().SetTrackingOption(TrackerManager.TrackingOption.EXTEND_TRACKING);
  131.     }
  132.  
  133.     public void SetMultiMode()
  134.     {
  135.         TrackerManager.GetInstance().SetTrackingOption(TrackerManager.TrackingOption.MULTI_TRACKING);
  136.     }
  137.  
  138.     void OnApplicationPause(bool pause)
  139.     {
  140.         if (pause)
  141.         {
  142.             TrackerManager.GetInstance().StopTracker();
  143.         }
  144.         else
  145.         {
  146.             TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_IMAGE);
  147.         }
  148.     }
  149.  
  150.     void OnDestroy()
  151.     {
  152.         imageTrackablesMap.Clear();
  153.         TrackerManager.GetInstance().SetTrackingOption(TrackerManager.TrackingOption.NORMAL_TRACKING);
  154.         TrackerManager.GetInstance().StopTracker();
  155.         TrackerManager.GetInstance().DestroyTracker();
  156.     }
  157.  
  158. }
Advertisement
Add Comment
Please, Sign In to add comment