Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        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;
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
 public void UpdateZeroedTriangleVertices(TriangleData triangle)
 {
     Vertices[triangle.T0] = Vector3.zero;
     Vertices[triangle.T1] = Vector3.zero;
     Vertices[triangle.T2] = Vector3.zero;
 }
Exemplo n.º 11
0
 public void UpdateTriangleVertices(TriangleData triangle)
 {
     Vertices[triangle.T0] = triangle.V0;
     Vertices[triangle.T1] = triangle.V1;
     Vertices[triangle.T2] = triangle.V2;
 }
Exemplo n.º 12
0
 public TriangleVertices(TriangleData data)
 {
     V0 = data.V0;
     V1 = data.V1;
     V2 = data.V2;
 }