public IndexedPlane(IndexedPlane copy) { Position = copy.Position; Size = copy.Size; UVMin = copy.UVMin; UVMax = copy.UVMax; Facings = copy.Facings; }
public static Mesh Construct(IndexedPlane metaResource) { var mesh = new Mesh { NVertices = 0, NFaces = 0, MeshType = MeshType.Indexed, VertexStreamLayout = Vertex.Position3Normal3Texcoord3.Instance }; List <Vertex.Position3Normal3Texcoord3> verts = new List <Vertex.Position3Normal3Texcoord3>(); if ((metaResource.Facings & Facings.Frontside) != 0) { mesh.NVertices += 4; verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X, metaResource.Position.Y, metaResource.Position.Z), Vector3.UnitZ, new Vector3(metaResource.UVMin.X, metaResource.UVMin.Y, 0))); verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X, metaResource.Position.Y + metaResource.Size.Y, metaResource.Position.Z), Vector3.UnitZ, new Vector3(metaResource.UVMin.X, metaResource.UVMax.Y, 0))); verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X + metaResource.Size.X, metaResource.Position.Y, metaResource.Position.Z), Vector3.UnitZ, new Vector3(metaResource.UVMax.X, metaResource.UVMin.Y, 0))); verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X + metaResource.Size.X, metaResource.Position.Y + metaResource.Size.Y, metaResource.Position.Z), Vector3.UnitZ, new Vector3(metaResource.UVMax.X, metaResource.UVMax.Y, 0))); } if ((metaResource.Facings & Facings.Backside) != 0) { mesh.NVertices += 4; verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X, metaResource.Position.Y, metaResource.Position.Z), -Vector3.UnitZ, new Vector3(metaResource.UVMin.X, metaResource.UVMin.Y, 0))); verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X, metaResource.Position.Y + metaResource.Size.Y, metaResource.Position.Z), -Vector3.UnitZ, new Vector3(metaResource.UVMin.X, metaResource.UVMax.Y, 0))); verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X + metaResource.Size.X, metaResource.Position.Y, metaResource.Position.Z), -Vector3.UnitZ, new Vector3(metaResource.UVMax.X, metaResource.UVMin.Y, 0))); verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X + metaResource.Size.X, metaResource.Position.Y + metaResource.Size.Y, metaResource.Position.Z), -Vector3.UnitZ, new Vector3(metaResource.UVMax.X, metaResource.UVMax.Y, 0))); } mesh.VertexBuffer = new VertexBuffer <Vertex.Position3Normal3Texcoord3>(verts.ToArray()); List <int> indices = new List <int>(); if ((metaResource.Facings & Facings.Frontside) != 0) { mesh.NFaces += 2; indices.Add(0); indices.Add(2); indices.Add(1); indices.Add(1); indices.Add(2); indices.Add(3); } if ((metaResource.Facings & Facings.Backside) != 0) { mesh.NFaces += 2; indices.Add(0); indices.Add(1); indices.Add(2); indices.Add(1); indices.Add(3); indices.Add(2); } mesh.IndexBuffer = new IndexBuffer(indices.ToArray()); return(mesh); }
public static Mesh Construct(IndexedPlane metaResource) { var mesh = new Mesh { NVertices = 0, NFaces = 0, MeshType = MeshType.Indexed, VertexStreamLayout = Vertex.Position3Normal3Texcoord3.Instance }; List<Vertex.Position3Normal3Texcoord3> verts = new List<Vertex.Position3Normal3Texcoord3>(); if ((metaResource.Facings & Facings.Frontside) != 0) { mesh.NVertices += 4; verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X, metaResource.Position.Y, metaResource.Position.Z), Vector3.UnitZ, new Vector3(metaResource.UVMin.X, metaResource.UVMin.Y, 0))); verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X, metaResource.Position.Y + metaResource.Size.Y, metaResource.Position.Z), Vector3.UnitZ, new Vector3(metaResource.UVMin.X, metaResource.UVMax.Y, 0))); verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X + metaResource.Size.X, metaResource.Position.Y, metaResource.Position.Z), Vector3.UnitZ, new Vector3(metaResource.UVMax.X, metaResource.UVMin.Y, 0))); verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X + metaResource.Size.X, metaResource.Position.Y + metaResource.Size.Y, metaResource.Position.Z), Vector3.UnitZ, new Vector3(metaResource.UVMax.X, metaResource.UVMax.Y, 0))); } if ((metaResource.Facings & Facings.Backside) != 0) { mesh.NVertices += 4; verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X, metaResource.Position.Y, metaResource.Position.Z), -Vector3.UnitZ, new Vector3(metaResource.UVMin.X, metaResource.UVMin.Y, 0))); verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X, metaResource.Position.Y + metaResource.Size.Y, metaResource.Position.Z), -Vector3.UnitZ, new Vector3(metaResource.UVMin.X, metaResource.UVMax.Y, 0))); verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X + metaResource.Size.X, metaResource.Position.Y, metaResource.Position.Z), -Vector3.UnitZ, new Vector3(metaResource.UVMax.X, metaResource.UVMin.Y, 0))); verts.Add(new Vertex.Position3Normal3Texcoord3(new Vector3(metaResource.Position.X + metaResource.Size.X, metaResource.Position.Y + metaResource.Size.Y, metaResource.Position.Z), -Vector3.UnitZ, new Vector3(metaResource.UVMax.X, metaResource.UVMax.Y, 0))); } mesh.VertexBuffer = new VertexBuffer<Vertex.Position3Normal3Texcoord3>(verts.ToArray()); List<int> indices = new List<int>(); if ((metaResource.Facings & Facings.Frontside) != 0) { mesh.NFaces += 2; indices.Add(0); indices.Add(2); indices.Add(1); indices.Add(1); indices.Add(2); indices.Add(3); } if ((metaResource.Facings & Facings.Backside) != 0) { mesh.NFaces += 2; indices.Add(0); indices.Add(1); indices.Add(2); indices.Add(1); indices.Add(3); indices.Add(2); } mesh.IndexBuffer = new IndexBuffer(indices.ToArray()); return mesh; }