- 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