public void ReadVerts(byte[] memory)
        {
            UnknownList l = new UnknownList();

            l.size     = BitConverter.ToInt32(memory, readerpos);
            l.count    = BitConverter.ToInt32(memory, readerpos + 4);
            readerpos += 8;
            int len = l.size * l.count;

            l.data = new byte[len];
            for (int i = 0; i < len; i++)
            {
                l.data[i] = memory[readerpos + i];
            }
            Vertices = new List <Vector3>();
            for (int i = 0; i < l.count; i++)
            {
                float f1 = BitConverter.ToSingle(memory, readerpos);
                float f2 = BitConverter.ToSingle(memory, readerpos + 4);
                float f3 = BitConverter.ToSingle(memory, readerpos + 8);
                Vertices.Add(new Vector3(f1, f2, f3));
                readerpos += l.size;
            }
            Verts v = new Verts();

            v.Points      = Vertices;
            Mesh.Vertices = v;
        }
Beispiel #2
0
 internal sealed override void AddTo(UnityEngine.UI.VertexHelper helper)
 {
     if (Verts != null && Indices != null)
     {
         helper.AddUIVertexStream(Verts.Select(Map).ToList(), Indices.ToList());
     }
 }
Beispiel #3
0
        // =========================================

        // ============= Build by Shape ============
        public void BuildFromExtents(MeshExtents box)
        {
            Verts.Add(new Vector3(box.Min.X, box.Min.Y, box.Max.Z));
            Verts.Add(new Vector3(box.Max.X, box.Min.Y, box.Max.Z));
            Verts.Add(new Vector3(box.Max.X, box.Max.Y, box.Max.Z));
            Verts.Add(new Vector3(box.Min.X, box.Max.Y, box.Max.Z));
            Verts.Add(new Vector3(box.Min.X, box.Min.Y, box.Min.Z));
            Verts.Add(new Vector3(box.Max.X, box.Min.Y, box.Min.Z));
            Verts.Add(new Vector3(box.Max.X, box.Max.Y, box.Min.Z));
            Verts.Add(new Vector3(box.Min.X, box.Max.Y, box.Min.Z));

            UVs.Add(new Vector2(0.0001f, 0.9999f));
            UVs.Add(new Vector2(0.9999f, 0.9999f));
            UVs.Add(new Vector2(0.9999f, 0.9999f));
            UVs.Add(new Vector2(0.0001f, 0.9999f));
            UVs.Add(new Vector2(0.0001f, 0.0001f));
            UVs.Add(new Vector2(0.9999f, 0.0001f));
            UVs.Add(new Vector2(0.9999f, 0.0001f));
            UVs.Add(new Vector2(0.0001f, 0.0001f));

            AddFace(3, 4, 0);
            AddFace(0, 2, 3);
            AddFace(0, 1, 2);
            AddFace(1, 5, 6);
            AddFace(1, 6, 2);
            AddFace(3, 7, 4);
            AddFace(2, 7, 3);
            AddFace(2, 6, 7);
            AddFace(0, 5, 1);
            AddFace(4, 7, 6);
            AddFace(0, 4, 5);
            AddFace(4, 6, 5);
        }
Beispiel #4
0
 private void Clean()
 {
     for (int i = Verts.Count - 1; i >= 0; i--)
     {
         for (int j = 0; j < i; j++)
         {
             var a = Verts[i];
             var b = Verts[j];
             if (a == b)
             {
                 Verts.RemoveAt(i);
                 foreach (var f in Faces)
                 {
                     if (f.Vert1 == i)
                     {
                         f.Vert1 = j;
                     }
                     if (f.Vert2 == i)
                     {
                         f.Vert2 = j;
                     }
                     if (f.Vert3 == i)
                     {
                         f.Vert3 = j;
                     }
                 }
                 break;
             }
         }
     }
 }
    /// <summary>
    /// Converrts RawMeshData into a Mesh object
    /// </summary>
    /// <returns></returns>
    public Mesh ToMesh()
    {
        Mesh res = new Mesh();

        res.vertices  = Verts.ToArray();
        res.triangles = Utils.ToTris(Tris);
        res.RecalculateNormals();
        return(res);
    }
 private void UpdateVertsAndUVs()
 {
     Mesh.Clear();
     for (int i = 0; i < Config.VertsPerLoop; i++)
     {
         Verts.Add(LoopOrientMatrix * LoopVerts[i]);
         UVs.Add(new Vector2((float)i / (Config.VertsPerLoop - 1), Mathf.Clamp01(currentSegmentLength / Config.SegmentLength)));
     }
     Mesh.SetVertices(Verts);
     Mesh.SetUVs(0, UVs);
 }
Beispiel #7
0
        // =========================================

        // ============ Build by Values ============
        public void AddFace(Vector3 v1, Vector3 v2, Vector3 v3)
        {
            if (!Verts.Contains(v1))
            {
                Verts.Add(v1);
            }
            if (!Verts.Contains(v2))
            {
                Verts.Add(v2);
            }
            if (!Verts.Contains(v3))
            {
                Verts.Add(v3);
            }

            AddFace(Verts.IndexOf(v1), Verts.IndexOf(v2), Verts.IndexOf(v3), 0);
        }
Beispiel #8
0
        public void Optimise()
        {
            List <C2Vertex> points = new List <C2Vertex>();
            List <Vector3>  verts  = new List <Vector3>();
            List <Vector2>  uvs    = new List <Vector2>();

            for (int i = 0; i < Verts.Count; i++)
            {
                C2Vertex p = new C2Vertex(Verts[i], UVs[i]);

                //Console.WriteLine("Vert " + i);
                int newID = points.IndexOf(p);
                //int newID = verts.IndexOf(Verts[i]);

                if (newID == -1)
                {
                    //Console.WriteLine("Adding " + p.ToString());
                    points.Add(p);
                    verts.Add(Verts[i]);
                    uvs.Add(UVs[i]);
                    newID = verts.Count - 1;
                }

                for (int j = 0; j < Faces.Count; j++)
                {
                    Faces[j].ReplaceVertID(i, newID);
                }
            }

            //Console.WriteLine("Reduced Vert count from " + Verts.Count + " to " + verts.Count);
            //Console.WriteLine("Reduced UV count from " + UVs.Count + " to " + uvs.Count);

            Verts.Clear();
            for (int i = 0; i < verts.Count; i++)
            {
                Verts.Add(verts[i]);
            }
            UVs.Clear();
            for (int i = 0; i < uvs.Count; i++)
            {
                UVs.Add(uvs[i]);
            }
        }
        private void StartTubeSegment()
        {
            currentSegmentLength = 0;
            Verts.Clear();
            Tris.Clear();
            UVs.Clear();

            CurrentSegment = new GameObject();
            CurrentSegment.AddComponent <MeshFilter>();
            CurrentSegment.AddComponent <MeshRenderer>();

            Mesh = CurrentSegment.GetComponent <MeshFilter>().mesh;
            Mesh.MarkDynamic();
            CurrentSegment.GetComponent <Renderer>().material = Material;
            Mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;

            UpdateVertsAndUVs();
            Mesh.RecalculateNormals();
            LoopCount = 1;
        }
Beispiel #10
0
        public void AddFace(Vector3 v1, Vector3 v2, Vector3 v3, Vector2 uv1, Vector2 uv2, Vector2 uv3, int matID)
        {
            int iv1, iv2, iv3, iuv1, iuv2, iuv3;

            Verts.Add(v1);
            iv1 = Verts.Count - 1;
            Verts.Add(v2);
            iv2 = Verts.Count - 1;
            Verts.Add(v3);
            iv3 = Verts.Count - 1;

            UVs.Add(uv1);
            iuv1 = UVs.Count - 1;
            UVs.Add(uv2);
            iuv2 = UVs.Count - 1;
            UVs.Add(uv3);
            iuv3 = UVs.Count - 1;

            AddFace(iv1, iv2, iv3, iuv1, iuv2, iuv3, matID);
        }
        public ushort CreateFreshSubMesh(ushort vertsToReserve, ushort trisToReserve)
        {
            // create custom List<> implementation with NativeArray that supports growth without assignment!
            SubMesh subMesh = new SubMesh((ushort)Verts.Count, (ushort)Tris.Count, vertsToReserve, trisToReserve);

            lastVert += vertsToReserve;
            lastTri  += trisToReserve;
            SubMeshes.Add(subMesh);
            for (int i = 0; i < vertsToReserve; i++)
            {
                Verts.Add(Vector3.zero); // this is multiple assignment! BAD!
                Normals.Add(Vector3.up);
                TextureUVs.Add(Vector2.zero);
                SubmaterialUVs.Add(Vector2.zero);
            }
            for (int i = 0; i < trisToReserve; i++)
            {
                Tris.Add(0); // more evil multiple assignment!
            }
            return((ushort)(SubMeshes.Count + SubMeshBaseIdx - 1));
        }
Beispiel #12
0
        static Immediate()
        {
            TinyGizmo.OnRender = (PrimType, Verts) => {
                Vector3[] Positions = Verts.Select((V) => V.Position.XYZ()).ToArray();
                Vector4[] Colors    = Verts.Select((V) => V.Color).ToArray();

                if (PrimType == Im3dPrimitiveType.Triangles)
                {
                    Triangles(Positions, Colors);
                }
                else if (PrimType == Im3dPrimitiveType.Lines)
                {
                    Lines(Positions, Colors, Verts.Select((V) => V.Position.W).ToArray());
                }
                else
                {
                    Points(Positions, Colors, Verts.Select((V) => V.Position.W).ToArray());
                }
            };

            TinyGizmo.GizmoInit();
        }
Beispiel #13
0
 public void addVert(Position vert)
 {
     Verts.Add(vert);
 }
Beispiel #14
0
 public void ReadVerts(byte[] memory)
 {
     TreeNode res = new TreeNode("Vertices pos: 0x" + readerpos.ToString("X4"));
     UnknownList l = new UnknownList();
     l.size = BitConverter.ToInt32(memory, readerpos);
     l.count = BitConverter.ToInt32(memory, readerpos + 4);
     readerpos += 8;
     int len = l.size * l.count;
     l.data = new byte[len];
     for (int i = 0; i < len; i++)
         l.data[i] = memory[readerpos + i];
     res.Nodes.Add(new TreeNode("Size : " + l.size.ToString()));
     res.Nodes.Add(new TreeNode("Count : " + l.count.ToString()));
     TreeNode t = new TreeNode("Data");
     Vertices = new List<Vector3>();
     for (int i = 0; i < l.count; i++)
     {
         float f1 = BitConverter.ToSingle(memory, readerpos);
         float f2 = BitConverter.ToSingle(memory, readerpos + 4);
         float f3 = BitConverter.ToSingle(memory, readerpos + 8);
         Vertices.Add(new Vector3(f1, f2, f3));
         string s = f1 + " " + f2 + " " + f3;
         readerpos += l.size;
         t.Nodes.Add(new TreeNode("#" + i.ToString("D4") + " : " + s));
     }
     res.Nodes.Add(t);
     Verts v = new Verts();
     v.Points = Vertices;
     v.t = res;
     Mesh.Vertices = v;
 }
Beispiel #15
0
 public void AddListVertex(float x, float y, float z)
 {
     Verts.Add(new Vector3(x, y, z));
 }
Beispiel #16
0
 // ============= Build by List =============
 public void AddListVertex(Vector3 v)
 {
     Verts.Add(v);
 }
Beispiel #17
0
 public void ReadVerts(byte[] memory)
 {
     UnknownList l = new UnknownList();
     l.size = BitConverter.ToInt32(memory, readerpos);
     l.count = BitConverter.ToInt32(memory, readerpos + 4);
     readerpos += 8;
     int len = l.size * l.count;
     l.data = new byte[len];
     for (int i = 0; i < len; i++)
         l.data[i] = memory[readerpos + i];
     Vertices = new List<Vector3>();
     for (int i = 0; i < l.count; i++)
     {
         float f1 = BitConverter.ToSingle(memory, readerpos);
         float f2 = BitConverter.ToSingle(memory, readerpos + 4);
         float f3 = BitConverter.ToSingle(memory, readerpos + 8);
         Vertices.Add(new Vector3(f1, f2, f3));
         readerpos += l.size;
     }
     Verts v = new Verts();
     v.Points = Vertices;
     Mesh.Vertices = v;
 }