예제 #1
0
        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));
        }
예제 #2
0
        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);
        }
예제 #3
0
        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)));
        }
예제 #4
0
        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));
        }
예제 #5
0
        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));
        }
예제 #6
0
        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));
        }
예제 #7
0
        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);
        }
예제 #8
0
 public IGeometryMemoryPool GetGeometryPool() => currentState.GetGeometryPool();
예제 #9
0
        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));
        }