예제 #1
0
        public void Draw(RendererBatch batch, Color treeColor, Color leafColor)
        {
            var treeNodes = new Stack <Node>();

            treeNodes.Push(_root);

            while (treeNodes.Count > 0)
            {
                var treeNode = treeNodes.Pop();

                if (treeNode != null && !treeNode.IsLeaf)
                {
                    batch.DrawPrimitives(p =>
                    {
                        var aabb = treeNode.AABB;
                        p.DrawRectangle(aabb.Min, aabb.Size, treeColor);
                    });

                    treeNodes.Push(treeNode.Left);
                    treeNodes.Push(treeNode.Right);
                }
            }

            foreach (var leafNode in _nodes.Values)
            {
                batch.DrawPrimitives(p =>
                {
                    var aabb = leafNode.AABB;
                    p.DrawRectangle(aabb.Min, aabb.Size, leafColor);
                });
            }
        }
예제 #2
0
        protected override void AfterDraw(RendererBatch batch)
        {
            BlendState        = null;
            DepthStencilState = new DepthStencilState()
            {
                DepthBufferEnable = false,
                StencilEnable     = true,
                StencilFunction   = Reverse
                    ? CompareFunction.Equal
                    : CompareFunction.NotEqual,
                StencilPass      = StencilOperation.Keep,
                ReferenceStencil = 0
            };
            Effect = null;

            batch.Configure(BlendState, DepthStencilState, Effect, Matrix);
            batch.Begin();
            batch.DrawPrimitives(primitive =>
            {
                primitive.FillRectangle(
                    View.Location.ToVector2(),
                    View.Size.ToVector2(),
                    ClearColor);
            });
            batch.End();
        }