- Home /
 
Raycast - Add tris (script inside)
Hello! I add triangles to mesh. intTris - RaycastHit.triangleIndex.
Triangles is added, but the rest are deleted. How to fix?

 using UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
 
 public class AddTrisClass
 {
     static List<Vector3> vertices;
     static List<Vector3> normals;
     // [... all other vertex data arrays you need]
     
     static List<int> indices;
     static Dictionary<uint,int> newVectices;
     static int GetNewVertex(int i1, int i2)
     {
         // We have to test both directions since the edge
         // could be reversed in another triangle
         uint t1 = ((uint)i1 << 16) | (uint)i2;
         uint t2 = ((uint)i2 << 16) | (uint)i1;
         if (newVectices.ContainsKey(t2))
             return newVectices[t2];
         if (newVectices.ContainsKey(t1))
             return newVectices[t1];
         // generate vertex:
         int newIndex = vertices.Count;
         newVectices.Add(t1,newIndex);
         
         // calculate new vertex
         vertices.Add((vertices[i1] + vertices[i2]) * 0.5f);
         normals.Add((normals[i1] + normals[i2]).normalized);
         // [... all other vertex data arrays]
         
         return newIndex;
     }
     
     
     public static void Subdivide(Mesh mesh, int intTris)
     {
         newVectices = new Dictionary<uint,int>();
         
         vertices = new List<Vector3>(mesh.vertices);
         normals = new List<Vector3>(mesh.normals);
 
 
 
         indices = new List<int>();
 
         int[] triangles = mesh.triangles;
         for (int i = 0; i < triangles.Length; i += 3)
         {
 
 
             //int i1 = triangles [i + 0];
             //int i2 = triangles [i + 1];
             //int i3 = triangles [i + 2];
 
             int i11 = triangles [intTris * 3 + 0];
             int i22 = triangles [intTris * 3 + 1];
             int i33 = triangles [intTris * 3 + 2];
 
 
                 int a = GetNewVertex(i11, i22);
                 int b = GetNewVertex(i22, i33);
                 int c = GetNewVertex(i33, i11);
     
 
 
                 indices.Add(i11);   indices.Add(a);   indices.Add(c);
                 indices.Add(i22);   indices.Add(b);   indices.Add(a);
                 indices.Add(i33);   indices.Add(c);   indices.Add(b);
                 indices.Add(a);   indices.Add(b);   indices.Add(c); // center triangle
 
 
 
         }
 
     
         
         
         
         
         mesh.vertices = vertices.ToArray();
         mesh.normals = normals.ToArray();
         // [... all other vertex data arrays]
         mesh.triangles = indices.ToArray();
 
         // since this is a static function and it uses static variables
         // we should erase the arrays to free them:
         newVectices = null;
         vertices = null;
         normals = null;
         // [... all other vertex data arrays]
         
         indices = null;
     }
 }
 
               
                 
                s1.png 
                (179.6 kB) 
               
 
              
               Comment
              
 
               
              Your answer
 
             Follow this Question
Related Questions
contains two different ids for the same vertex 0 Answers
Mesh extrusion overlapping triangles problem 0 Answers
Problem drawing a mesh with Graphics.DrawMeshNow 1 Answer
Holes in procedural mesh 0 Answers
Highmap on a cube. 0 Answers