private static void SubDivideNormals(TriangleData source, ref TriangleData[] target) { var n0 = source.N0; var n1 = source.N1; var n2 = source.N2; var na = (n0 + n1) / 2.0f; var nb = (n1 + n2) / 2.0f; var nc = (n2 + n0) / 2.0f; target[0].N0 = n0; target[0].N1 = na; target[0].N2 = nc; target[1].N0 = nc; target[1].N1 = nb; target[1].N2 = n2; target[2].N0 = na; target[2].N1 = nb; target[2].N2 = nc; target[3].N0 = na; target[3].N1 = n1; target[3].N2 = nb; }
private static void SubDivideVertices(TriangleData source, ref TriangleData[] target) { var v0 = source.V0; var v1 = source.V1; var v2 = source.V2; var va = (v0 + v1) / 2.0f; var vb = (v1 + v2) / 2.0f; var vc = (v2 + v0) / 2.0f; target[0].V0 = v0; target[0].V1 = va; target[0].V2 = vc; target[1].V0 = vc; target[1].V1 = vb; target[1].V2 = v2; target[2].V0 = va; target[2].V1 = vb; target[2].V2 = vc; target[3].V0 = va; target[3].V1 = v1; target[3].V2 = vb; }
private static void SubDivideUvs(TriangleData source, ref TriangleData[] target) { var uv0 = source.Uv0; var uv1 = source.Uv1; var uv2 = source.Uv2; var uva = (uv0 + uv1) / 2.0f; var uvb = (uv1 + uv2) / 2.0f; var uvc = (uv2 + uv0) / 2.0f; target[0].Uv0 = uv0; target[0].Uv1 = uva; target[0].Uv2 = uvc; target[1].Uv0 = uvc; target[1].Uv1 = uvb; target[1].Uv2 = uv2; target[2].Uv0 = uva; target[2].Uv1 = uvb; target[2].Uv2 = uvc; target[3].Uv0 = uva; target[3].Uv1 = uv1; target[3].Uv2 = uvb; }
public SmartTriangle(TriangleData triangle, TrianglesPool pool, float minimumArea) { IsSet = false; _triangle = triangle; _currentVertices = _targetVertices = new TriangleVertices(_triangle); _pool = pool; _hasChildren = _targetVertices.GetArea() > minimumArea; if (_hasChildren) { GenerateChildren(minimumArea); } }
public void UpdateTriangleData(TriangleData triangle) { Vertices[triangle.T0] = triangle.V0; Vertices[triangle.T1] = triangle.V1; Vertices[triangle.T2] = triangle.V2; Normals[triangle.T0] = triangle.N0; Normals[triangle.T1] = triangle.N1; Normals[triangle.T2] = triangle.N2; Uvs[triangle.T0] = triangle.Uv0; Uvs[triangle.T1] = triangle.Uv1; Uvs[triangle.T2] = triangle.Uv2; }
public void UpdateData(TriangleData data) { V0 = data.V0; V1 = data.V1; V2 = data.V2; N0 = data.N0; N1 = data.N1; N2 = data.N2; Uv0 = data.Uv0; Uv1 = data.Uv1; Uv2 = data.Uv2; }
public void SetTriangle(TriangleData triangle) { Triangles.Add(triangle.T0); Triangles.Add(triangle.T1); Triangles.Add(triangle.T2); Vertices.Add(triangle.V0); Vertices.Add(triangle.V1); Vertices.Add(triangle.V2); Normals.Add(triangle.N0); Normals.Add(triangle.N1); Normals.Add(triangle.N2); Uvs.Add(triangle.Uv0); Uvs.Add(triangle.Uv1); Uvs.Add(triangle.Uv2); }
public static T[] SubDivideTriangle <T>(TriangleData triangle, T parent, Func <TriangleData, T, T> getChild) { var tds = new[] { new TriangleData(), new TriangleData(), new TriangleData(), new TriangleData() }; SubDivideTriangles(ref tds); SubDivideVertices(triangle, ref tds); SubDivideNormals(triangle, ref tds); SubDivideUvs(triangle, ref tds); var triangles = new T[4]; for (int i = 0; i < triangles.Length; i++) { triangles[i] = getChild(tds[i], parent); } return(triangles); }
public static SmartTriangle[] SubDivideTriangle(TriangleData triangle, TrianglesPool pool, float targetArea) { var tds = new TriangleData[] { new TriangleData(), new TriangleData(), new TriangleData(), new TriangleData() }; SubDivideTriangles(ref tds); SubDivideVertices(triangle, ref tds); SubDivideNormals(triangle, ref tds); SubDivideUvs(triangle, ref tds); var sts = new SmartTriangle[4]; for (int i = 0; i < sts.Length; i++) { sts[i] = new SmartTriangle(tds[i], pool, targetArea); } return(sts); }
public void UpdateZeroedTriangleVertices(TriangleData triangle) { Vertices[triangle.T0] = Vector3.zero; Vertices[triangle.T1] = Vector3.zero; Vertices[triangle.T2] = Vector3.zero; }
public void UpdateTriangleVertices(TriangleData triangle) { Vertices[triangle.T0] = triangle.V0; Vertices[triangle.T1] = triangle.V1; Vertices[triangle.T2] = triangle.V2; }
public TriangleVertices(TriangleData data) { V0 = data.V0; V1 = data.V1; V2 = data.V2; }