xamarin рисует 3d призму с помощью C # - PullRequest
0 голосов
/ 01 октября 2018

С Xamarin и c # я пытаюсь нарисовать 3D призму.Я нарисовал полигоны для призм.Есть ли простой способ создать призму?Можно ли нарисовать его, увеличив толщину многоугольников?

Я написал верх и низ шестиугольной призмы.Однако индивидуальная очистка вызывает чрезмерный код, и я в замешательстве.Можете ли вы предложить более простой способ сделать это?

Что я на самом деле хочу, так это сделать шесть точек сначала шестиугольной, а затем шестиугольной призмой.Часть моего кода ::

  VertexBuffer.PositionNormalColor[] vertices = {
         new VertexBuffer.PositionNormalColor{
         Position = new Vector3(0,3, 25),
         Color = Color.Blue.ToUInt()
         },
         new VertexBuffer.PositionNormalColor{
         Position = new Vector3(4 ,3, 25),
         Color = Color.Blue.ToUInt()
         },
         new VertexBuffer.PositionNormalColor{
         Position = new Vector3(5,2, 20),
         Color = Color.Blue.ToUInt()
         },
         new VertexBuffer.PositionNormalColor{
         Position = new Vector3(3, 0, 15),
         Color = Color.Blue.ToUInt()
         },
         new VertexBuffer.PositionNormalColor{
         Position = new Vector3(-1, 0, 15),
         Color = Color.Blue.ToUInt()
         },
         new VertexBuffer.PositionNormalColor{
         Position = new Vector3(-2, 2, 20),
         Color = Color.Blue.ToUInt()
         },

        };

        var vertexBuffer = new VertexBuffer(Application.CurrentContext, false);
        vertexBuffer.SetSize((uint)vertices.Length, ElementMask.Position | ElementMask.Normal | ElementMask.Color);
        vertexBuffer.SetData(vertices);

        var geometry = new Geometry();
        geometry.SetVertexBuffer(0, vertexBuffer);
        geometry.SetDrawRange(PrimitiveType.TriangleFan, 0, 0, 0, (uint)vertices.Length, true);
        var model = new Model();
        model.NumGeometries = 1;
        model.SetGeometry(0, 0, geometry);
        model.BoundingBox = new BoundingBox(new Vector3(0, 0, 0), new Vector3(1, 1, 1));
        var material = Material.FromColor(Color.White);

        var triangleNode = scene.CreateChild();

        var triangle = triangleNode.CreateComponent<StaticModel>();

        triangle.Model = model;

        triangle.SetMaterial(material);

      //bottom part(height=4)
         VertexBuffer.PositionNormalColor[] vertices_alt = {
         new VertexBuffer.PositionNormalColor{
         Position = new Vector3(0,-1, 25),
         Color = Color.Blue.ToUInt()
         },
         new VertexBuffer.PositionNormalColor{
         Position = new Vector3(4 ,-1, 25),
         Color = Color.Blue.ToUInt()
         },
         new VertexBuffer.PositionNormalColor{
         Position = new Vector3(5,-2, 20),
         Color = Color.Blue.ToUInt()
         },
         new VertexBuffer.PositionNormalColor{
         Position = new Vector3(3, -4, 15),
         Color = Color.Blue.ToUInt()
         },
         new VertexBuffer.PositionNormalColor{
         Position = new Vector3(-1, -4, 15),
         Color = Color.Blue.ToUInt()
         },
         new VertexBuffer.PositionNormalColor{
         Position = new Vector3(-2, -2, 20),
         Color = Color.Blue.ToUInt()
         },

        };


        var vertexBuffer_alt = new VertexBuffer(Application.CurrentContext, false);
        vertexBuffer_alt.SetSize((uint)vertices_alt.Length, ElementMask.Position | ElementMask.Normal | ElementMask.Color);
        vertexBuffer_alt.SetData(vertices_alt);

        var geometry_alt = new Geometry();
        geometry_alt.SetVertexBuffer(0, vertexBuffer_alt);
        geometry_alt.SetDrawRange(PrimitiveType.TriangleFan, 0, 0, 0, (uint)vertices_alt.Length, true);
        var model_alt = new Model();
        model_alt.NumGeometries = 1;
        model_alt.SetGeometry(0, 0, geometry_alt);
        model_alt.BoundingBox = new BoundingBox(new Vector3(0, 0, 0), new Vector3(1, 1, 1));
        var material_alt = Material.FromColor(Color.White);

        var triangleNode_alt = scene.CreateChild();

        var triangle_alt = triangleNode_alt.CreateComponent<StaticModel>();

        triangle_alt.Model = model_alt;

        triangle_alt.SetMaterial(material_alt);
...