Exemplo n.º 1
0
 public static void OnRightSelected()
 {
     selection = "Right";
     SideSelector.SetSide(selection);
     testStart = true;
     input.gameObject.SetActive(false);
 }
        internal BidirectionalTraverserIterator(Resource resource, MonoDirectionalTraversalDescription start, MonoDirectionalTraversalDescription end, SideSelectorPolicy sideSelector, Org.Neo4j.Graphdb.traversal.BranchCollisionPolicy collisionPolicy, PathEvaluator collisionEvaluator, int maxDepth, IEnumerable <Node> startNodes, IEnumerable <Node> endNodes) : base(resource)
        {
            this._sides[Direction.OUTGOING] = new Side(start);
            this._sides[Direction.INCOMING] = new Side(end);
            this._uniqueness = MakeSureStartAndEndHasSameUniqueness(start, end);

            // A little chicken-and-egg problem. This happens when constructing the start/end
            // selectors and they initially call evaluate() and isUniqueFirst, where the selector is used.
            // Solved this way for now, to have it return the start side to begin with.
            this._selector = FixedSide(Direction.OUTGOING);
            BranchSelector startSelector = start.BranchOrdering.create(new AsOneStartBranch(this, startNodes, start.InitialState, start.UniquenessConflict), start.Expander);

            this._selector = FixedSide(Direction.INCOMING);
            BranchSelector endSelector = end.BranchOrdering.create(new AsOneStartBranch(this, endNodes, end.InitialState, start.UniquenessConflict), end.Expander);

            this._selector          = sideSelector.Create(startSelector, endSelector, maxDepth);
            this._collisionDetector = collisionPolicy.Create(collisionEvaluator, _uniqueness.checkFull);
        }
Exemplo n.º 3
0
        protected void ProcessFrame()
        {
            if (XDevice == null || !Scanning)
            {
                return;
            }

            Processing++;
            try
            {
                if (DepthCacheUsed >= DepthAveragingCacheSize)
                {
                    if (FrameID % FusionSpacing == 0)
                    {
                        XDevice.SetRenderTarget(Vector2TargetA);
                        XDevice.Clear(Color.Black);
                        XDevice.SetRenderTarget(Vector2TargetB);
                        XDevice.Clear(Color.Black);

                        int mainIndex = (DepthIndex + DepthMainItem) % DepthAveragingCacheSize;
                        mainRotation = DepthCache[mainIndex].Rotation;
                        byte[] deltaData;
                        float  deltaRotation;
                        bool   tick = false;
                        for (int i = 0; i < DepthAveragingCacheSize; i++)
                        {
                            deltaData     = DepthCache[i].Data;
                            deltaRotation = DepthCache[i].Rotation - mainRotation;
                            if (deltaRotation > MathHelper.Pi)
                            {
                                deltaRotation -= MathHelper.TwoPi;
                            }
                            if (deltaRotation < -MathHelper.Pi)
                            {
                                deltaRotation += MathHelper.TwoPi;
                            }

                            for (int j = 0; j < 16; j++)
                            {
                                XDevice.Textures[j] = null;
                            }
                            TRawDepth.SetData <byte>(deltaData);

                            //Anti-distort
                            XDevice.SetRenderTarget(SingleTargetA);
                            XDevice.Clear(Color.Black);
                            XDevice.RasterizerState   = RasterizerState.CullNone;
                            XDevice.BlendState        = BlendState.Opaque;
                            XDevice.DepthStencilState = DepthStencilState.None;

                            DepthSampler.SetValue(TRawDepth);
                            DepthCorrectionSampler.SetValue(TDepthCorrection);
                            XEffect.CurrentTechnique = DepthAntiDistortTechnique; //<----
                            XEffect.CurrentTechnique.Passes[0].Apply();
                            MiniPlane.Draw();
                            if (ViewMode == Views.AntiDistort)
                            {
                                Visualize(SingleTargetA, DepthVisualizationTechnique, MainViewport);
                            }

                            //Reprojection + transform
                            SetReprojection(deltaRotation);
                            TriangleRemoveLimit.SetValue(Context.TriangleRemoveLimit);
                            XDevice.SetRenderTarget(SingleTargetB);
                            XDevice.Clear(Color.Black);
                            XDevice.BlendState        = BlendState.Opaque;
                            XDevice.RasterizerState   = RasterizerState.CullCounterClockwise;
                            XDevice.DepthStencilState = DepthStencilState.Default;

                            DepthSampler.SetValue(SingleTargetA);
                            XEffect.CurrentTechnique = PerspectiveReprojectionTechnique; //<----
                            XEffect.CurrentTechnique.Passes[0].Apply();
                            MaxiPlane.Draw();

                            if (ViewMode == Views.Sum)
                            {
                                Visualize(SingleTargetB, DepthVisualizationTechnique, MainViewport);
                            }

                            //Sum
                            XDevice.SetRenderTarget(tick ? Vector2TargetA : Vector2TargetB);
                            XDevice.Clear(Color.Black);
                            XDevice.RasterizerState   = RasterizerState.CullNone;
                            XDevice.BlendState        = BlendState.Opaque;
                            XDevice.DepthStencilState = DepthStencilState.None;

                            DepthSamplerA.SetValue(SingleTargetB);
                            DepthSamplerB.SetValue(tick ? Vector2TargetB : Vector2TargetA);
                            XEffect.CurrentTechnique = SumTechnique; //<----
                            XEffect.CurrentTechnique.Passes[0].Apply();
                            MiniPlane.Draw();
                            tick = !tick;
                        }

                        //Fusion + transform
                        SetFusionReprojection(0f, mainRotation);
                        XDevice.SetRenderTarget(SingleTargetTick ? SingleTargetA : SingleTargetB);
                        DepthSampler.SetValue(tick ? Vector2TargetB : Vector2TargetA);
                        XEffect.CurrentTechnique = AvgTechnique; //<----
                        XEffect.CurrentTechnique.Passes[0].Apply();
                        MiniPlane.Draw();

                        if (ViewMode == Views.Avg)
                        {
                            Visualize(SingleTargetTick ? SingleTargetA : SingleTargetB, SignedDepthVisualizationTechnique, MainViewport);
                        }

                        //Gauss
                        for (int i = 0; i < 0; i++)
                        {
                            XDevice.SetRenderTarget(SingleTargetTick ? SingleTargetB : SingleTargetA);
                            DepthSampler.SetValue(SingleTargetTick ? SingleTargetA : SingleTargetB);
                            XEffect.CurrentTechnique = VGaussTechnique;
                            XEffect.CurrentTechnique.Passes[0].Apply();
                            MiniPlane.Draw();
                            SingleTargetTick = !SingleTargetTick;

                            XDevice.SetRenderTarget(SingleTargetTick ? SingleTargetB : SingleTargetA);
                            DepthSampler.SetValue(SingleTargetTick ? SingleTargetA : SingleTargetB);
                            XEffect.CurrentTechnique = HGaussTechnique;
                            XEffect.CurrentTechnique.Passes[0].Apply();
                            MiniPlane.Draw();
                            SingleTargetTick = !SingleTargetTick;
                        }

                        if (ViewMode == Views.Gauss)
                        {
                            Visualize(SingleTargetTick ? SingleTargetA : SingleTargetB, SignedDepthVisualizationTechnique, MainViewport);
                        }

                        for (int leg = 0; leg < 2; leg++)
                        {
                            SideSelector.SetValue(leg == 0 ? 1f : -1f);
                            ProcessLeg(leg, leg == VisualizedLeg || VisualizedLeg == 2, VisualizedLeg == 2 ? Viewports[leg] : MainViewport, leg == VisualizedLeg || (VisualizedLeg == 2 && leg == 1), VisualizedLeg != 2 || (VisualizedLeg == 2 && leg == 0));
                        }
                    }
                    FrameID++;
                }
                if (StopPending)
                {
                    StopARE.Set();
                    StopPending = false;
                }
            }
            catch
            {
                if (System.Diagnostics.Debugger.IsAttached)
                {
                    System.Diagnostics.Debugger.Break();
                }
            }
            Processing--;
        }