private void ExtractMeshDataThread()
        {
            while (IsThreadRunning == true)
            {
                try
                {
                    if (IsMeshUpdate == false && _UpdateDepthCollider == true)
                    {
                        ViveSR_DualCameraDepthExtra.GetDepthColliderFrameInfo();
                        int currentDepthColliderTimeIndex = ViveSR_DualCameraDepthExtra.DepthColliderTimeIndex;
                        if (currentDepthColliderTimeIndex != LastDepthColliderUpdateTime)
                        {
                            ExtractCurrentColliders();
                            LastDepthColliderUpdateTime = currentDepthColliderTimeIndex;
                        }
                    }
                }
                catch (System.Exception e)
                {
                    Debug.LogWarning(e.Message);
                }

                Thread.Sleep(ThreadPeriod); //Avoid too fast get data from SR SDK DLL
            }
        }
        public override bool Release()
        {
            if (!ViveSR.EnableUnityDepth)
            {
                return(false);
            }
            if (ColliderObjs != null)
            {
                ColliderObjs.SetActive(false);
            }

            UpdateDepthCollider            = false;
            UpdateDepthColliderRange       = true;
            UpdateDepthColliderHoleFilling = true;
            ColliderMeshVisibility         = false;
            IsThreadRunning = false;
            if (MeshDataThread != null)
            {
                MeshDataThread.Join();
                MeshDataThread.Abort();
                MeshDataThread = null;
            }
            if (IsCoroutineRunning == true)
            {
                StopCoroutine(MeshDataCoroutine);
                MeshDataCoroutine = null;
            }

            ViveSR_DualCameraDepthExtra.ReleaseDepthCollider();
            MeshDataVertices.Clear();
            MeshDataIndices.Clear();
            return(true);
        }
 private void ExtractCurrentColliders()
 {
     ViveSR_DualCameraDepthExtra.GetDepthColliderData(ref NumCldVertData, out VertexData, ref NumCldIdxData, out CldIdxData);
     if (NumCldVertData != 0 && NumCldIdxData != 0)
     {
         GenerateMeshColliders();
     }
 }
        public override bool Initial()
        {
            if (!ViveSR.EnableUnityDepth)
            {
                return(false);
            }
            if (ViveSR.FrameworkStatus == FrameworkStatus.WORKING)
            {
                if (ViveSR_Framework.MODULE_ID_DEPTH != 0)
                {
                    ViveSR_DualCameraDepthExtra.InitialDepthCollider(ViveSR_DualCameraImageCapture.DepthImageWidth,
                                                                     ViveSR_DualCameraImageCapture.DepthImageHeight);
                    if (ColliderObjs == null)
                    {
                        ColliderObjs = new GameObject("Depth Collider");
                        ColliderObjs.transform.SetParent(gameObject.transform, false);

                        ColliderMeshes      = ColliderObjs.AddComponent <MeshFilter>();
                        ColliderMeshes.mesh = new Mesh();
                        ColliderMeshes.mesh.MarkDynamic();

                        ChangeColliderMaterial(ColliderDefaultMaterial);

                        MeshClds = ColliderObjs.AddComponent <MeshCollider>();
                    }
                    ColliderObjs.SetActive(true);
                    ColliderMeshVisibility = false;

                    SetQualityScale(QualityScale);
                    if (MeshDataThread == null)
                    {
                        IsMeshUpdate       = false;
                        IsCoroutineRunning = false;
                        IsThreadRunning    = true;
                        MeshDataThread     = new Thread(ExtractMeshDataThread)
                        {
                            IsBackground = true
                        };
                        MeshDataThread.Start();
                    }
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            return(false);
        }
Пример #5
0
 public void ExtractMeshData()
 {
     try
     {
         if (IsMeshUpdate == false && _UpdateDepthCollider == true)
         {
             ViveSR_DualCameraDepthExtra.GetDepthColliderFrameInfo();
             int currentDepthColliderTimeIndex = ViveSR_DualCameraDepthExtra.DepthColliderTimeIndex;
             if (currentDepthColliderTimeIndex != LastDepthColliderUpdateTime)
             {
                 ExtractCurrentColliders();
                 LastDepthColliderUpdateTime = currentDepthColliderTimeIndex;
             }
         }
     }
     catch (System.Exception e)
     {
         Debug.LogWarning(e.Message);
     }
 }