Esempio n. 1
0
 public void UnloadTarget(ImageTargetController target)
 {
     if (target.Target != null && !TryGetTargetController(target.Target.runtimeID()))
     {
         return;
     }
     target.Tracker = null;
 }
 public void UnloadImageTarget(ImageTargetController controller, System.Action <Target, bool> callback)
 {
     if (tracker == null)
     {
         throw new Exception("image tracker is null");
     }
     tracker.unloadTarget(controller.Target(), EasyARBehaviour.Scheduler, callback);
     targetControllers.Remove(controller);
 }
Esempio n. 3
0
 internal void LoadImageTarget(ImageTargetController controller, Action <Target, bool> callback)
 {
     Tracker.loadTarget(controller.Target, EasyARController.Scheduler, (target, status) =>
     {
         if (TargetLoad != null)
         {
             TargetLoad(controller, target, status);
         }
         if (callback != null)
         {
             callback(target, status);
         }
     });
     allTargetController[controller.Target.runtimeID()] = controller;
 }
Esempio n. 4
0
        static private void UpdateScale(ImageTargetController controller, float s)
        {
            if (Application.isPlaying)
            {
                return;
            }
            var vec3Unit = Vector3.one;

            if (controller.HorizontalFlip)
            {
                vec3Unit.x = -vec3Unit.x;
            }
            controller.transform.localScale = vec3Unit * s;

            controller.GizmoData.Scale          = s;
            controller.GizmoData.ScaleX         = controller.transform.localScale.x;
            controller.GizmoData.HorizontalFlip = controller.HorizontalFlip;
        }
Esempio n. 5
0
 internal void UnloadImageTarget(ImageTargetController controller, Action <Target, bool> callback)
 {
     if (allTargetController.Remove(controller.Target.runtimeID()))
     {
         controller.OnTracking(false);
         Tracker.unloadTarget(controller.Target, EasyARController.Scheduler, (target, status) =>
         {
             if (TargetUnload != null)
             {
                 TargetUnload(controller, target, status);
             }
             if (callback != null)
             {
                 callback(target, status);
             }
         });
     }
 }
Esempio n. 6
0
        static void DrawGizmo(ImageTargetController scr, GizmoType gizmoType)
        {
            var signature = scr.SourceType.ToString();

            switch (scr.SourceType)
            {
            case ImageTargetController.DataSource.ImageFile:
                if (!EasyARController.Settings.GizmoConfig.ImageTarget.EnableImageFile)
                {
                    return;
                }
                signature += scr.ImageFileSource.PathType.ToString() + scr.ImageFileSource.Path;
                break;

            case ImageTargetController.DataSource.TargetDataFile:
                if (!EasyARController.Settings.GizmoConfig.ImageTarget.EnableTargetDataFile)
                {
                    return;
                }
                signature += scr.TargetDataFileSource.PathType.ToString() + scr.TargetDataFileSource.Path;
                break;

            case ImageTargetController.DataSource.Target:
                if (!EasyARController.Settings.GizmoConfig.ImageTarget.EnableTarget)
                {
                    return;
                }
                if (scr.Target != null)
                {
                    signature += scr.Target.runtimeID().ToString();
                }
                break;

            default:
                break;
            }

            if (scr.GizmoData.Material == null)
            {
                scr.GizmoData.Material = new Material(Shader.Find("EasyAR/ImageTargetGizmo"));
            }
            if (scr.GizmoData.Signature != signature)
            {
                if (scr.GizmoData.Texture != null)
                {
                    UnityEngine.Object.DestroyImmediate(scr.GizmoData.Texture);
                    scr.GizmoData.Texture = null;
                }

                string path;
                switch (scr.SourceType)
                {
                case ImageTargetController.DataSource.ImageFile:
                    path = scr.ImageFileSource.Path;
                    if (scr.ImageFileSource.PathType == PathType.StreamingAssets)
                    {
                        path = Application.streamingAssetsPath + "/" + scr.ImageFileSource.Path;
                    }
                    if (System.IO.File.Exists(path))
                    {
                        var sourceData = System.IO.File.ReadAllBytes(path);
                        scr.GizmoData.Texture = new Texture2D(2, 2);
                        scr.GizmoData.Texture.LoadImage(sourceData);
                        scr.GizmoData.Texture.Apply();
                        UpdateScale(scr, scr.ImageFileSource.Scale);
                        if (SceneView.lastActiveSceneView)
                        {
                            SceneView.lastActiveSceneView.Repaint();
                        }
                    }
                    break;

                case ImageTargetController.DataSource.TargetDataFile:
                    path = scr.TargetDataFileSource.Path;
                    if (scr.TargetDataFileSource.PathType == PathType.StreamingAssets)
                    {
                        path = Application.streamingAssetsPath + "/" + scr.TargetDataFileSource.Path;
                    }
                    if (System.IO.File.Exists(path))
                    {
                        if (!EasyARController.Initialized)
                        {
                            EasyARController.GlobalInitialization();
                            if (!EasyARController.Initialized)
                            {
                                Debug.LogWarning("EasyAR Sense target data gizmo enabled but license key validation failed, target data gizmo will not show");
                            }
                        }
                        var sourceData = System.IO.File.ReadAllBytes(path);

                        using (Buffer buffer = Buffer.wrapByteArray(sourceData))
                        {
                            var targetOptional = ImageTarget.createFromTargetData(buffer);
                            if (targetOptional.OnSome)
                            {
                                using (ImageTarget target = targetOptional.Value)
                                {
                                    var imageList = target.images();
                                    if (imageList.Count > 0)
                                    {
                                        var image = imageList[0];
                                        scr.GizmoData.Texture = new Texture2D(image.width(), image.height(), TextureFormat.R8, false);
                                        scr.GizmoData.Texture.LoadRawTextureData(image.buffer().data(), image.buffer().size());
                                        scr.GizmoData.Texture.Apply();
                                    }
                                    foreach (var image in imageList)
                                    {
                                        image.Dispose();
                                    }
                                    UpdateScale(scr, target.scale());
                                    if (SceneView.lastActiveSceneView)
                                    {
                                        SceneView.lastActiveSceneView.Repaint();
                                    }
                                }
                            }
                        }
                    }
                    break;

                case ImageTargetController.DataSource.Target:
                    if (scr.Target != null)
                    {
                        var imageList = (scr.Target as ImageTarget).images();
                        if (imageList.Count > 0)
                        {
                            var image = imageList[0];
                            scr.GizmoData.Texture = new Texture2D(image.width(), image.height(), TextureFormat.R8, false);
                            scr.GizmoData.Texture.LoadRawTextureData(image.buffer().data(), image.buffer().size());
                            scr.GizmoData.Texture.Apply();
                        }
                        foreach (var image in imageList)
                        {
                            image.Dispose();
                        }
                        UpdateScale(scr, (scr.Target as ImageTarget).scale());
                        if (SceneView.lastActiveSceneView)
                        {
                            SceneView.lastActiveSceneView.Repaint();
                        }
                    }
                    break;

                default:
                    break;
                }

                if (scr.GizmoData.Texture == null)
                {
                    scr.GizmoData.Texture = new Texture2D(2, 2);
                    scr.GizmoData.Texture.LoadImage(new byte[0]);
                    scr.GizmoData.Texture.Apply();
                }
                scr.GizmoData.Signature = signature;
            }

            if (scr.GizmoData.Material && scr.GizmoData.Texture)
            {
                scr.GizmoData.Material.SetMatrix("_Transform", scr.transform.localToWorldMatrix);
                if (scr.GizmoData.Texture.format == TextureFormat.R8)
                {
                    scr.GizmoData.Material.SetInt("_isRenderGrayTexture", 1);
                }
                else
                {
                    scr.GizmoData.Material.SetInt("_isRenderGrayTexture", 0);
                }
                scr.GizmoData.Material.SetFloat("_Ratio", (float)scr.GizmoData.Texture.height / scr.GizmoData.Texture.width);
                Gizmos.DrawGUITexture(new Rect(0, 0, 1, 1), scr.GizmoData.Texture, scr.GizmoData.Material);
            }
        }
        public void UpdateFrame(ARSessionUpdateEventArgs args)
        {
            List <ImageTargetController> currentTrackingControllers = new List <ImageTargetController>();
            var results = args.OFrame.results();

            foreach (var _result in results)
            {
                ImageTrackerResult result = null;
                if (_result.OnSome)
                {
                    result = _result.Value as ImageTrackerResult;
                }

                if (result != null)
                {
                    var targetInstances = result.targetInstances();
                    int centerTargetId  = -1;
                    if (TargetCamera == null)
                    {
                        Utility.SetMatrixOnTransform(Camera.main.transform, centerTransform);
                    }
                    else
                    {
                        Utility.SetMatrixOnTransform(TargetCamera.transform, centerTransform);
                    }
                    if (CenterImageTarget != null && CenterImageTarget.Target() != null && CenterTarget == CenterMode.SpecificTarget)
                    {
                        centerTargetId = CenterImageTarget.Target().runtimeID();
                    }
                    foreach (var targetInstance in targetInstances)
                    {
                        var target = targetInstance.target();
                        if (!target.OnSome)
                        {
                            continue;
                        }
                        var status = targetInstance.status();
                        foreach (var targetController in targetControllers)
                        {
                            var _target = targetController.Target();
                            if (target.Value.runtimeID() == _target.runtimeID())
                            {
                                if (status == TargetStatus.Tracked)
                                {
                                    if (!targetController.Tracked)
                                    {
                                        targetController.OnFound();
                                        targetController.Tracked = true;
                                    }
                                    var pose = Utility.Matrix44FToMatrix4x4(targetInstance.pose());
                                    pose = args.ImageRotationMatrixGlobal * pose;

                                    if (CenterTarget == CenterMode.FirstTarget && centerTargetId == -1)
                                    {
                                        centerTargetId    = target.Value.runtimeID();
                                        CenterImageTarget = targetController;
                                    }

                                    if (centerTargetId != target.Value.runtimeID())
                                    {
                                        pose = centerTransform * pose;
                                        targetController.OnTracking(pose);
                                    }
                                    else
                                    {
                                        targetController.OnTracking(Matrix4x4.identity);
                                        centerTransform = pose.inverse;
                                    }
                                    currentTrackingControllers.Add(targetController);
                                }
                            }
                        }
                        target.Value.Dispose();
                        targetInstance.Dispose();
                    }
                    result.Dispose();
                }
            }
            foreach (var targetController in targetControllers)
            {
                bool contain = false;
                foreach (var item in currentTrackingControllers)
                {
                    if (item == targetController)
                    {
                        contain = true;
                    }
                }
                if (!contain && targetController.Tracked)
                {
                    targetController.OnLost();
                    targetController.Tracked = false;
                }
            }
        }