public void Clear() { Mesh.Clear(); Uvs.Clear(); Vertices.Clear(); Triangles.Clear(); }
/// <summary> /// 当前实体数据变成两倍,使单面实体变成双面实体。 /// </summary> public void MakeDoubleSided() { ((List <XYZ>)Points).Capacity = Points.Count * 2; ((List <XYZ>)Normals).Capacity = this.Normals.Count * 2; ((List <UV>)Uvs).Capacity = this.Uvs.Count * 2; ((List <int>)Indices).Capacity = this.Indices.Count * 2; int count = Points.Count; for (int i = 0; i < count; i++) { Points.Add(Points[i]); } int count2 = Normals.Count; for (int j = 0; j < count2; j++) { Normals.Add(Normals[j]); } int count3 = Uvs.Count; for (int k = 0; k < count3; k++) { Uvs.Add(Uvs[k]); } for (int l = 0; l < count2; l++) { Normals[l].Negate(); } int count4 = Indices.Count; for (int m = 0; m < count4; m++) { Indices.Add(Indices[m]); } int value = 0; for (int n = 0; n < count4; n++) { int num = n % 3; if (num != 1) { if (num == 2) { Indices[n] = value; } } else { value = Indices[n]; Indices[n] = Indices[n + 1]; } } }
public void Dispose() { MapWithNeighbours.Dispose(); LightMapWithNeighbours.Dispose(); LightLevelMap.Dispose(); LitVoxels.Dispose(); Vertices.Dispose(); Normals.Dispose(); Triangles.Dispose(); Uvs.Dispose(); Colors.Dispose(); }
public virtual void SetTextureAtlasUv() { const float epsilon = 0.001f; var TextureAtlasUv = GetTextureAtlasUv(); Uvs.Add(new Vector2(TextureAtlasUv.x + epsilon, TextureAtlasUv.y + epsilon)); Uvs.Add(new Vector2(TextureAtlasUv.x + epsilon, TextureAtlasUv.y + TextureAtlasUv.height - epsilon)); Uvs.Add(new Vector2(TextureAtlasUv.x + TextureAtlasUv.width - epsilon, TextureAtlasUv.y + TextureAtlasUv.height - epsilon)); Uvs.Add(new Vector2(TextureAtlasUv.x + TextureAtlasUv.width - epsilon, TextureAtlasUv.y + epsilon)); }
public void Destroy() { if (m_objTransform != null) { MeshFilter meshFilter = m_objTransform.GetComponent <MeshFilter>(); meshFilter.mesh.Clear(); UnityEngine.Object.Destroy(meshFilter.mesh); meshFilter.mesh = null; UnityEngine.Object.Destroy(meshFilter); UnityEngine.Object.Destroy(m_objTransform); m_objTransform = null; Vertices.Clear(); Uvs.Clear(); Colors.Clear(); Indices.Clear(); } }
public void Clear(bool clearMesh = true) { if (clearMesh) { Mesh.Clear(); } Use32BitIndices = FARSettingsScenarioModule.VoxelSettings.use32BitIndices; Uvs.Clear(); Vertices.Clear(); foreach (List <int> sublist in Indices) { sublist.Clear(); } currentSubmesh = 0; nextVertexCount = 0; currentOffset = 0; }
public void Clear() { if (Vertices != null) { Vertices.Clear(); } if (Uvs != null) { Uvs.Clear(); } if (VertexColors != null) { VertexColors.Clear(); } if (Triangles != null) { Triangles.Clear(); } }
/// <summary> /// write obj file /// </summary> /// <param name="writer"></param> public void Write(StreamWriter writer) { writer.WriteLine("# File generated by Arctron BIMClient"); if (!String.IsNullOrEmpty(MatFilename)) { writer.WriteLine($"mtllib {MatFilename}"); } var vs = String.Join(Environment.NewLine, Vertices.Select(v => $"v {v.X} {v.Y} {v.Z}")); writer.WriteLine(vs); writer.Flush(); var ts = String.Join(Environment.NewLine, Uvs.Select(t => $"vt {t.U} {t.V}")); writer.WriteLine(ts); writer.Flush(); var ns = String.Join(Environment.NewLine, Normals.Select(n => $"vn {n.X} {n.Y} {n.Z}")); writer.WriteLine(ns); writer.Flush(); foreach (var g in Geometries) { g.Write(writer); } }
private List <Vertex> BuildVertList(ModelRoot Root, out List <mesh> meshes) { List <Vertex> verts = new List <Vertex>(); meshes = new List <mesh>(); foreach (var Node in Root.LogicalNodes) { if (Node.Mesh == null) { continue; } Mesh Mesh = Node.Mesh; mesh m = new mesh(); m.name = Mesh.Name; m.geoms = new List <geom>(); foreach (MeshPrimitive Primitive in Mesh.Primitives) { geom g = new geom(); g.strips = new List <strip>(); g.diffuse = Primitive.Material?.Channels?.First(channel => channel.Key == "BaseColor").Parameter ?? Vector4.One; var texture = Primitive.Material?.Channels?.FirstOrDefault(channel => channel.Key == "BaseColor").Texture; if (texture != null) { g.texture = texture.PrimaryImage.Name + ".png"; } GetVertexBuffer(Primitive, out List <Vector3> Vertices); GetNormalBuffer(Primitive, out List <Vector3> Normals); GetTexCoordBuffer(Primitive, out List <Vector2> Uvs); Vector3[] vs = Vertices.ToArray(); Vector3[] ns = Normals.ToArray(); Vector2[] uvs = Uvs.ToArray(); GetIndexBuffer(Primitive, out List <(int A, int B, int C)> Indices); //TODO stripify triangles foreach (var tri in Indices) { g.strips.Add(new strip { triangleCount = 1, vertexOffset = verts.Count }); Vector4 PosC = new Vector4(vs[tri.C].X, vs[tri.C].Y, vs[tri.C].Z, 1); Vector4 PosB = new Vector4(vs[tri.B].X, vs[tri.B].Y, vs[tri.B].Z, 1); Vector4 PosA = new Vector4(vs[tri.A].X, vs[tri.A].Y, vs[tri.A].Z, 1); PosC = Vector4.Transform(PosC, Node.WorldMatrix); PosB = Vector4.Transform(PosB, Node.WorldMatrix); PosA = Vector4.Transform(PosA, Node.WorldMatrix); verts.Add(new Vertex { X = PosC.X, Y = PosC.Y, Z = PosC.Z, NX = ns[tri.C].X, NY = ns[tri.C].Y, NZ = ns[tri.C].Z, U = uvs[tri.C].X, V = uvs[tri.C].Y }.Converted()); verts.Add(new Vertex { X = PosB.X, Y = PosB.Y, Z = PosB.Z, NX = ns[tri.B].X, NY = ns[tri.B].Y, NZ = ns[tri.B].Z, U = uvs[tri.B].X, V = uvs[tri.B].Y }.Converted()); verts.Add(new Vertex { X = PosA.X, Y = PosA.Y, Z = PosA.Z, NX = ns[tri.A].X, NY = ns[tri.A].Y, NZ = ns[tri.A].Z, U = uvs[tri.A].X, V = uvs[tri.A].Y }.Converted()); } m.geoms.Add(g); } meshes.Add(m); } return(verts); }
public Cube(float size) { float s2 = size * 0.5f; #region top face Positions.Add(new Vector3(-s2, s2, s2)); //0 Positions.Add(new Vector3(s2, s2, s2)); //1 Positions.Add(new Vector3(s2, s2, -s2)); //2 Positions.Add(new Vector3(-s2, s2, -s2)); //3 Normals.Add(Vector3.UnitY); Normals.Add(Vector3.UnitY); Normals.Add(Vector3.UnitY); Normals.Add(Vector3.UnitY); Uvs.Add(new Vector2(0, 1)); Uvs.Add(new Vector2(1, 1)); Uvs.Add(new Vector2(1, 0)); Uvs.Add(new Vector2(0, 0)); Ids.Add(0); Ids.Add(1); Ids.Add(3); Ids.Add(1); Ids.Add(2); Ids.Add(3); #endregion #region bottom face Positions.Add(new Vector3(-s2, -s2, s2)); //4 Positions.Add(new Vector3(s2, -s2, s2)); //5 Positions.Add(new Vector3(s2, -s2, -s2)); //6 Positions.Add(new Vector3(-s2, -s2, -s2)); //7 Normals.Add(-Vector3.UnitY); Normals.Add(-Vector3.UnitY); Normals.Add(-Vector3.UnitY); Normals.Add(-Vector3.UnitY); Uvs.Add(new Vector2(0, 0)); Uvs.Add(new Vector2(1, 0)); Uvs.Add(new Vector2(1, 1)); Uvs.Add(new Vector2(0, 1)); Ids.Add(7); Ids.Add(6); Ids.Add(5); Ids.Add(4); Ids.Add(7); Ids.Add(5); #endregion #region front face Positions.Add(new Vector3(-s2, s2, s2)); //8 Positions.Add(new Vector3(s2, s2, s2)); //9 Positions.Add(new Vector3(-s2, -s2, s2)); //10 Positions.Add(new Vector3(s2, -s2, s2)); //11 Normals.Add(Vector3.UnitZ); Normals.Add(Vector3.UnitZ); Normals.Add(Vector3.UnitZ); Normals.Add(Vector3.UnitZ); Uvs.Add(new Vector2(0, 0)); Uvs.Add(new Vector2(1, 0)); Uvs.Add(new Vector2(0, 1)); Uvs.Add(new Vector2(1, 1)); Ids.Add(8); Ids.Add(10); Ids.Add(9); Ids.Add(10); Ids.Add(11); Ids.Add(9); #endregion #region back face Positions.Add(new Vector3(s2, s2, -s2)); //12 Positions.Add(new Vector3(-s2, s2, -s2)); //13 Positions.Add(new Vector3(s2, -s2, -s2)); //14 Positions.Add(new Vector3(-s2, -s2, -s2)); //15 Normals.Add(-Vector3.UnitZ); Normals.Add(-Vector3.UnitZ); Normals.Add(-Vector3.UnitZ); Normals.Add(-Vector3.UnitZ); Uvs.Add(new Vector2(0, 0)); Uvs.Add(new Vector2(1, 0)); Uvs.Add(new Vector2(0, 1)); Uvs.Add(new Vector2(1, 1)); Ids.Add(13); Ids.Add(12); Ids.Add(15); Ids.Add(12); Ids.Add(14); Ids.Add(15); #endregion #region left face Positions.Add(new Vector3(-s2, s2, s2)); //16 Positions.Add(new Vector3(-s2, s2, -s2)); //17 Positions.Add(new Vector3(-s2, -s2, s2)); //18 Positions.Add(new Vector3(-s2, -s2, -s2)); //19 Normals.Add(-Vector3.UnitX); Normals.Add(-Vector3.UnitX); Normals.Add(-Vector3.UnitX); Normals.Add(-Vector3.UnitX); Uvs.Add(new Vector2(1, 0)); Uvs.Add(new Vector2(0, 0)); Uvs.Add(new Vector2(1, 1)); Uvs.Add(new Vector2(0, 1)); Ids.Add(17); Ids.Add(19); Ids.Add(16); Ids.Add(19); Ids.Add(18); Ids.Add(16); #endregion #region right face Positions.Add(new Vector3(s2, s2, s2)); //20 Positions.Add(new Vector3(s2, s2, -s2)); //21 Positions.Add(new Vector3(s2, -s2, s2)); //22 Positions.Add(new Vector3(s2, -s2, -s2)); //23 Normals.Add(Vector3.UnitX); Normals.Add(Vector3.UnitX); Normals.Add(Vector3.UnitX); Normals.Add(Vector3.UnitX); Uvs.Add(new Vector2(0, 0)); Uvs.Add(new Vector2(1, 0)); Uvs.Add(new Vector2(0, 1)); Uvs.Add(new Vector2(1, 1)); Ids.Add(20); Ids.Add(22); Ids.Add(23); Ids.Add(21); Ids.Add(20); Ids.Add(23); #endregion }