示例#1
0
 public void Clear()
 {
     Mesh.Clear();
     Uvs.Clear();
     Vertices.Clear();
     Triangles.Clear();
 }
示例#2
0
        /// <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];
                }
            }
        }
示例#3
0
        public void Dispose()
        {
            MapWithNeighbours.Dispose();
            LightMapWithNeighbours.Dispose();
            LightLevelMap.Dispose();
            LitVoxels.Dispose();

            Vertices.Dispose();
            Normals.Dispose();
            Triangles.Dispose();
            Uvs.Dispose();
            Colors.Dispose();
        }
示例#4
0
        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));
        }
示例#5
0
文件: Obj.cs 项目: wwo0oww/BaseGame
        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();
     }
 }
示例#8
0
        /// <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);
            }
        }
示例#9
0
        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);
        }
示例#10
0
        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
        }