コード例 #1
0
        /// <summary>
        /// Handles the SurfaceObserver's OnDataReady event.
        /// </summary>
        /// <param name="cookedData">Struct containing output data.</param>
        /// <param name="outputWritten">Set to true if output has been written.</param>
        /// <param name="elapsedCookTimeSeconds">Seconds between mesh cook request and propagation of this event.</param>
        private void SurfaceObserver_OnDataReady(SurfaceData cookedData, bool outputWritten, float elapsedCookTimeSeconds)
        {
            //We have new visuals, so we can disable and cleanup the older surface
            GameObject surfaceToCleanup;

            if (pendingCleanup.TryGetValue(cookedData.id.handle, out surfaceToCleanup))
            {
                CleanupSurface(surfaceToCleanup);
                pendingCleanup.Remove(cookedData.id.handle);
            }

            GameObject surface;

            if (surfaces.TryGetValue(cookedData.id.handle, out surface))
            {
                // Set the draw material for the renderer.
                MeshRenderer renderer = surface.GetComponent <MeshRenderer>();
                renderer.sharedMaterial = SpatialMappingManager.Instance.SurfaceMaterial;
                renderer.enabled        = SpatialMappingManager.Instance.DrawVisualMeshes;

                if (SpatialMappingManager.Instance.CastShadows == false)
                {
                    renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
                }
            }

            surfaceWorkOutstanding = false;
            SurfaceObserver.SurfaceDataReadyDelegate dataReady = DataReady;
            if (dataReady != null)
            {
                dataReady(cookedData, outputWritten, elapsedCookTimeSeconds);
            }
        }
コード例 #2
0
        public bool RequestMeshAsync(SurfaceData dataRequest, SurfaceObserver.SurfaceDataReadyDelegate onDataReady)
        {
            if (onDataReady == null)
            {
                throw new ArgumentNullException("onDataReady");
            }
            if (dataRequest.outputMesh == null)
            {
                throw new ArgumentNullException("dataRequest.outputMesh");
            }
            if (dataRequest.outputAnchor == null)
            {
                throw new ArgumentNullException("dataRequest.outputAnchor");
            }
            if (dataRequest.outputCollider == null && dataRequest.bakeCollider)
            {
                throw new ArgumentException("dataRequest.outputCollider must be non-NULL if dataRequest.bakeCollider is true", "dataRequest.outputCollider");
            }
            if ((double)dataRequest.trianglesPerCubicMeter < 0.0)
            {
                throw new ArgumentException("dataRequest.trianglesPerCubicMeter must be greater than zero", "dataRequest.trianglesPerCubicMeter");
            }
            bool flag = SurfaceObserver.Internal_AddToWorkQueue(this.m_Observer, onDataReady, dataRequest.id.handle, dataRequest.outputMesh, dataRequest.outputAnchor, dataRequest.outputCollider, dataRequest.trianglesPerCubicMeter, dataRequest.bakeCollider);

            if (!flag)
            {
                Debug.LogError("RequestMeshAsync has failed.  Is your surface ID valid?");
            }
            return(flag);
        }
コード例 #3
0
 private static void InvokeSurfaceDataReadyEvent(SurfaceObserver.SurfaceDataReadyDelegate onDataReady, int surfaceId, MeshFilter outputMesh, WorldAnchor outputAnchor, MeshCollider outputCollider, float trisPerCubicMeter, bool bakeCollider, bool outputWritten, float elapsedBakeTimeSeconds)
 {
     if (onDataReady != null)
     {
         SurfaceData bakedData;
         bakedData.id.handle              = surfaceId;
         bakedData.outputMesh             = outputMesh;
         bakedData.outputAnchor           = outputAnchor;
         bakedData.outputCollider         = outputCollider;
         bakedData.trianglesPerCubicMeter = trisPerCubicMeter;
         bakedData.bakeCollider           = bakeCollider;
         onDataReady(bakedData, outputWritten, elapsedBakeTimeSeconds);
     }
 }
コード例 #4
0
 private static extern bool Internal_AddToWorkQueue(IntPtr observer, SurfaceObserver.SurfaceDataReadyDelegate onDataReady, int surfaceId, MeshFilter filter, WorldAnchor wa, MeshCollider mc, float trisPerCubicMeter, bool createColliderData);