예제 #1
0
        private void DrawChildren(IDeviceContextHolder contextHolder, ICamera camera, SpecialRenderMode mode, Func <IRenderableObject, bool> filter = null)
        {
            if (!IsEnabled || filter?.Invoke(this) == false)
            {
                return;
            }
            if (mode == SpecialRenderMode.Reflection && !IsReflectable)
            {
                return;
            }
            if (camera != null && BoundingBox != null && !camera.Visible(BoundingBox.Value))
            {
                return;
            }

            UpdateLookAt();

            var c = Count;

            for (var i = 0; i < c; i++)
            {
                var child = this[i];
                if (child.IsEnabled)
                {
                    child.Draw(contextHolder, camera, mode, filter);
                }
            }

            if (HighlightBoundingBoxes && mode == SpecialRenderMode.SimpleTransparent)
            {
                if (_box == null)
                {
                    var box = GeometryGenerator.CreateLinesBox(new Vector3(1f));
                    _box = new DebugLinesObject(Matrix.Identity,
                                                box.Vertices.Select(x => new InputLayouts.VerticePC(x.Position, new Color4(1f, 1f, 0.5f, 0f))).ToArray(),
                                                box.Indices.ToArray());
                }

                for (var i = 0; i < c; i++)
                {
                    var child = this[i];
                    if (child.IsEnabled && child.BoundingBox.HasValue)
                    {
                        var bb = child.BoundingBox.Value;
                        _box.ParentMatrix = Matrix.Scaling(bb.GetSize()) * Matrix.Translation(bb.GetCenter());
                        _box.Draw(contextHolder, camera, SpecialRenderMode.Simple);
                    }
                }
            }
        }
예제 #2
0
        public static DebugLinesObject GetLinesBox(Matrix matrix, Vector3 size, Color4 color)
        {
            var vertices = new List <InputLayouts.VerticePC>();
            var indices  = new List <ushort>();

            var box = GeometryGenerator.CreateLinesBox(size);

            for (var i = 0; i < box.Vertices.Length; i++)
            {
                vertices.Add(new InputLayouts.VerticePC(box.Vertices[i].Position, color));
            }

            indices.AddRange(box.Indices);
            return(new DebugLinesObject(matrix, vertices.ToArray(), indices.ToArray()));
        }