С 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);