Beispiel #1
0
        private IReadOnlyList <List <ModelPose> > ComputeBatches(List <AModel> models, IViewPoint viewPoint)
        {
            var batches = new List <List <ModelPose> >();

            var currentBatch  = new List <ModelPose>();
            var currentBounds = new BoundingRectangle();

            for (var i = 0; i < models.Count; i++)
            {
                var model = models[i];

                var bounds    = this.Bounds.Get(model.Entity);
                var pose      = this.Poses.Get(model.Entity);
                var modelPose = new ModelPose(model, pose);

                var boundingRectangle = BoundingRectangle.CreateFromProjectedBoundingBox(bounds.BoundingBox, viewPoint);

                if (currentBatch.Count == 0)
                {
                    currentBounds = boundingRectangle;
                    currentBatch.Add(modelPose);
                }
                else if (boundingRectangle.Intersects(currentBounds))
                {
                    batches.Add(currentBatch);
                    currentBatch = new List <ModelPose> {
                        modelPose
                    };
                    currentBounds = boundingRectangle;
                }
                else
                {
                    currentBatch.Add(modelPose);
                    currentBounds = BoundingRectangle.CreateMerged(currentBounds, boundingRectangle);
                }
            }

            if (currentBatch.Count > 0)
            {
                batches.Add(currentBatch);
            }

            return(batches);
        }
Beispiel #2
0
        private static IReadOnlyList <List <AModel> > ComputeBatches(List <AModel> models, IViewPoint viewPoint)
        {
            var batches = new List <List <AModel> >();

            var currentBatch  = new List <AModel>();
            var currentBounds = new BoundingRectangle();

            for (var i = 0; i < models.Count; i++)
            {
                var model = models[i];

                var bounds = BoundingRectangle.CreateFromProjectedBoundingBox(
                    model.BoundingBox,
                    viewPoint);

                if (currentBatch.Count == 0)
                {
                    currentBounds = bounds;
                    currentBatch.Add(model);
                }
                else if (bounds.Intersects(currentBounds))
                {
                    batches.Add(currentBatch);
                    currentBatch = new List <AModel> {
                        model
                    };
                    currentBounds = bounds;
                }
                else
                {
                    currentBatch.Add(model);
                    currentBounds = BoundingRectangle.CreateMerged(currentBounds, bounds);
                }
            }

            if (currentBatch.Count > 0)
            {
                batches.Add(currentBatch);
            }

            return(batches);
        }