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); } } } }
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())); }