public static VisualPolylineObject Create(IContextState context, ElementTag tag, Vector3[] points, Vector4 color, bool isVisible = true) { var manager = context.GetEntityManager(); var indeces = new List <int>(); var pos = new List <Vector3>(); var prev = points[0]; for (var i = 0; i < points.Length; i++) { pos.Add(prev); pos.Add(points[i]); prev = points[i]; } for (var i = 0; i < pos.Count; i++) { indeces.AddRange(new[] { i, i }); } var geo = context.GetGeometryPool().AddGeometry(new ImmutableGeometryData(pos, indeces)); manager .CreateEntity(tag) .AddComponent(geo) .AddComponent(TransformComponent.Identity()) .AddComponent(ColorComponent.CreateDiffuse(color)) .AddComponent(isVisible ? RenderableComponent.AsLineList() : RenderableComponent.AsLineList().Disable()); return(new VisualPolylineObject(tag)); }
public static GraphicEntity BuildTextured(IContextState context, IReadOnlyCollection <Vector3> pos, IReadOnlyCollection <int> indexes, IReadOnlyCollection <Vector2> texCoor, FileInfo texture, CullMode cullMode) { if (texCoor == null) { throw new Exception("Geo must have TextCoor."); } var manager = context.GetEntityManager(); var en = manager.CreateEntity(new ElementTag("TexturedGeometry" + Guid.NewGuid())); var material = MaterialColorComponent.CreateTransparent().ApplyAlpha(1); var geo = context.GetGeometryPool() .AddGeometry(new ImmutableGeometryData( pos, pos.ToList().CalculateNormals(indexes.ToList()).AsReadOnly(), indexes, texCoor)); en.AddComponent(TransformComponent.Identity()) .AddComponent(geo) .AddComponent(material) .AddComponent(new D3DTexturedMaterialSamplerComponent(texture)) .AddComponent(RenderableComponent.AsTriangleTexturedList(cullMode)); return(en); }
public static GraphicEntity BuildColored(IContextState context, ElementTag tag, ImmutableGeometryData geometry, Vector4 v4color, CullMode cullMode) { var material = MaterialColorComponent.Create(v4color); var manager = context.GetEntityManager(); var geo = context.GetGeometryPool() .AddGeometry(geometry); return(manager.CreateEntity(tag) .AddComponent(TransformComponent.Identity()) .AddComponent(material) .AddComponent(geo) .AddComponent(RenderableComponent.AsTriangleColoredList(cullMode))); }
public static VisualSphereObject SphereGeo(IContextState context, ElementTag tag, Data data) { var geo = GeometryBuilder.BuildSphere(data.Center, data.Radius); var geoId = context.GetGeometryPool() .AddGeometry(geo); var en = context.GetEntityManager() .CreateEntity(tag) .AddComponent(RenderableComponent.AsTriangleColored(SharpDX.Direct3D.PrimitiveTopology.TriangleStrip)) .AddComponent(TransformComponent.Identity()) .AddComponent(MaterialColorComponent.Create(data.Color)) .AddComponent(geoId) ; return(new VisualSphereObject(en.Tag)); }
public static VisualSphereObject Create(IContextState context, ElementTag elet, Data data) { var geo = GeometryBuilder.BuildSphere(data.Center, data.Radius); var geoId = context.GetGeometryPool() .AddGeometry(geo); var tag = context.GetEntityManager() .CreateEntity(elet) .AddComponent(SpherePointComponent.Create(data.Center, data.Radius)) .AddComponent(MaterialColorComponent.Create(data.Color)) .AddComponent(GeometryBoundsComponent.Create(AxisAlignedBox.FromSphere(data.Center, data.Radius))) .AddComponent(RenderableComponent.AsPoints()) .AddComponent(TransformComponent.Identity()) .Tag; return(new VisualSphereObject(tag)); }
public static ArrowGameObject Create(IContextState context, ElementTag tag, ArrowData data, bool visible = true) { var geo = GeometryBuilder.BuildArrow(data); var geoId = context.GetGeometryPool() .AddGeometry(geo); var en = context.GetEntityManager() .CreateEntity(tag) .AddComponent(visible ? RenderableComponent.AsTriangleColored(SharpDX.Direct3D.PrimitiveTopology.TriangleStrip) : RenderableComponent.AsTriangleColored(SharpDX.Direct3D.PrimitiveTopology.TriangleStrip).Disable()) .AddComponent(TransformComponent.Identity()) .AddComponent(MaterialColorComponent.Create(data.color)) .AddComponent(geoId) ; return(new ArrowGameObject(en.Tag)); }
static ElementTag Create(IContextState context, ElementTag tag, GeometryStructures gdata, FileInfo texture, out GeometryBoundsComponent boundsComponent) { var manager = context.GetEntityManager(); if (!gdata.Normals.Any()) { gdata.ReCalculateNormals(); } gdata.BuildTreeAsync(); var cullmode = SharpDX.Direct3D11.CullMode.Front; var geo = context.GetGeometryPool().AddGeometry(gdata); var en = manager.CreateEntity(tag); MaterialColorComponent material; RenderableComponent renderable; if (gdata.TexCoor.Any() && texture != null) { material = MaterialColorComponent.CreateTransparent().ApplyAlpha(1); renderable = RenderableComponent.AsTriangleTexturedList(cullmode); en.AddComponent(new D3DTexturedMaterialSamplerComponent(texture)); } else { material = MaterialColorComponent.Create(V4Colors.NextColor(random)); renderable = RenderableComponent.AsTriangleColoredList(cullmode); } boundsComponent = GeometryBoundsComponent.Create(gdata.Positions); en.AddComponent(TransformComponent.Identity()) .AddComponent(HittableComponent.Create(0)) .AddComponent(boundsComponent) .AddComponent(material) .AddComponent(geo) .AddComponent(renderable); return(tag); }
public IGeometryMemoryPool GetGeometryPool() => currentState.GetGeometryPool();
public static VisualPolylineObject CreateBox(IContextState context, ElementTag tag, AxisAlignedBox box, Vector4 color) { var indeces = new List <int>(); var pos = new List <Vector3>(); var xbox = box.GetCornersBox(); var NearBottomLeft = xbox.NearBottomLeft; var NearBottomRight = xbox.NearBottomRight; var NearTopLeft = xbox.NearTopLeft; var NearTopRight = xbox.NearTopRight; var FarBottomLeft = xbox.FarBottomLeft; var FarBottomRight = xbox.FarBottomRight; var FarTopLeft = xbox.FarTopLeft; var FarTopRight = xbox.FarTopRight; //top pos.Add(NearBottomLeft); pos.Add(NearBottomRight); pos.Add(NearBottomRight); pos.Add(NearTopRight); pos.Add(NearTopRight); pos.Add(NearTopLeft); pos.Add(NearTopLeft); pos.Add(NearBottomLeft); //side pos.Add(NearBottomLeft); pos.Add(FarBottomLeft); pos.Add(NearBottomRight); pos.Add(FarBottomRight); pos.Add(NearTopRight); pos.Add(FarTopRight); pos.Add(NearTopLeft); pos.Add(FarTopLeft); //bottom pos.Add(FarBottomLeft); pos.Add(FarBottomRight); pos.Add(FarBottomRight); pos.Add(FarTopRight); pos.Add(FarTopRight); pos.Add(FarTopLeft); pos.Add(FarTopLeft); pos.Add(FarBottomLeft); for (var i = 0; i < pos.Count; i++) { indeces.AddRange(new[] { i, i }); } var manager = context.GetEntityManager(); var geo = context.GetGeometryPool() .AddGeometry(new ImmutableGeometryData(pos.ToArray(), indeces.ToArray())); manager .CreateEntity(tag) .AddComponent(geo) .AddComponent(TransformComponent.Identity()) .AddComponent(ColorComponent.CreateDiffuse(color)) .AddComponent(RenderableComponent.AsLineList()); return(new VisualPolylineObject(tag)); }