Guest User

MAXST ZED Implementation

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