Exemple #1
0
        public void Initialize(HeadPoints headPoints, List <Vector3> facialFeatures, Vector2 topPoint)
        {
            if (facialFeatures.Count < headPoints.Points.Count)
            {
                return;
            }

            if (headPoints.Points.Count <= RootIndex)
            {
                return;
            }

            if (headPoints.Points.Count <= HelperIndex)
            {
                return;
            }

            rootPointWorld = headPoints.GetWorldPoint(RootIndex);
            var helperPointWorld = headPoints.GetWorldPoint(HelperIndex);

            rootPointPhoto = facialFeatures[RootIndex];
            var helperPointPhoto = facialFeatures[HelperIndex];

            float distWorld = rootPointWorld.X - helperPointWorld.X;
            float distPhoto = rootPointPhoto.X - helperPointPhoto.X;

            scale = distWorld / distPhoto;

            Initialize(facialFeatures, topPoint);
        }
Exemple #2
0
//=================================== OLD ===================================

        public void ProcessPoints_old(ProjectedDots dots, HeadPoints points)
        {
            projectedDots = dots;
            headPoints    = points;

            headIndices.Clear();
            for (int i = 0; i < dots.Points.Count; ++i)
            {
                headIndices.Add(i);
            }

            var rotaionMatrix = ProgramCore.MainForm.ctrlRenderControl.headMeshesController.RenderMesh.RotationMatrix;

            Matrix4.Invert(ref rotaionMatrix, out RotationMatrix);

            rightPower = 1.0f - Math.Abs(ProgramCore.MainForm.ctrlRenderControl.headMeshesController.RenderMesh.HeadAngle) * 2.0f / (float)Math.PI;
            //rightPower = Math.Min(1.0f, Math.Max(rightPower, 0.0f));
            // (float)Math.Cos(headPoints.HeadMesh.HeadAngle);

            rightVector   = headPoints.GetWorldPoint(new Vector3(1.0f, 0.0f, 0.0f));
            forwardVector = headPoints.GetWorldPoint(new Vector3(0.0f, 0.0f, 1.0f));

            ProcessHeadPoints_old();

            //SpecialAlignment();         // выравниваем точки рта-глаз-носа по центру лица
            //  MirrorPoints(headPoints.HeadMesh.HeadAngle > 0.0f);             // отразить форму лица зеркально
        }
        public void DrawTriangles(HeadPoints headPoints)
        {
            GL.Begin(PrimitiveType.Triangles);
            GL.Color4(0.0f, 1.0f, 0.0f, 0.3f);

            foreach (var triangle in TrianglesFront)
            {
                var a = headPoints.GetWorldPoint(triangle.A);
                var b = headPoints.GetWorldPoint(triangle.B);
                var c = headPoints.GetWorldPoint(triangle.C);
                GL.Vertex3(a);
                GL.Vertex3(b);
                GL.Vertex3(c);
            }
            GL.End();
        }
Exemple #4
0
        public void ProcessPoints(ProjectedDots dots, HeadPoints points)
        {
            projectedDots = dots;
            headPoints    = points;

            rightVector   = headPoints.GetWorldPoint(new Vector3(1.0f, 0.0f, 0.0f));
            forwardVector = headPoints.GetWorldPoint(new Vector3(0.0f, 0.0f, 1.0f));
            upVector      = headPoints.GetWorldPoint(new Vector3(0.0f, 1.0f, 0.0f));

            headIndices.Clear();
            for (int i = 0; i < dots.Points.Count; ++i)
            {
                headIndices.Add(i);
            }

            var rotationMatrix = ProgramCore.MainForm.ctrlRenderControl.headMeshesController.RenderMesh.RotationMatrix;

            Matrix4.Invert(ref rotationMatrix, out RotationMatrix);

            ProcessHeadPoints();

            FixLipsPoints();
        }
Exemple #5
0
        public void Initialize(HeadPoints hPoints, List <Vector3> facialFeatures)
        {
            MirroredPoints.Clear();
            AutodotsTexCords.Clear();

            for (int i = 0; i < MorphHelper.mirroredPoints.Count; i += 2)
            {
                MirroredPoints.Add(MorphHelper.mirroredPoints[i], MorphHelper.mirroredPoints[i + 1]);
                MirroredPoints.Add(MorphHelper.mirroredPoints[i + 1], MorphHelper.mirroredPoints[i]);
            }

            headPoints = hPoints;

            var headMesh = ProgramCore.MainForm.ctrlRenderControl.headMeshesController.RenderMesh;
            var a        = headMesh.AABB.A;
            var b        = headMesh.AABB.B;

            b.Z += 0.15f;
            var b1 = new Vector3(a.X, b.Y, b.Z);
            var b2 = new Vector3(a.X, a.Y, b.Z);
            var b3 = new Vector3(b.X, a.Y, b.Z);

            float centerX = (a.X + b.X) * 0.5f;
            float centerZ = (a.Z + b.Z) * 0.5f;

            var a1 = new Vector3(centerX, a.Y, centerZ);
            var a2 = new Vector3(centerX, b.Y, centerZ);

            foreach (var point in facialFeatures)
            {
                AutodotsTexCords.Add(point.Xy);
            }

            var NoseDot = headPoints.Points[2];

            NoseDot.Z            = b.Z;
            headPoints.Points[2] = NoseDot;

            headPoints.Points.Add(b); //70
            AutodotsTexCords.Add(new Vector2(1f, 0f));

            headPoints.Points.Add((b + b1) * 0.5f); //71
            AutodotsTexCords.Add(new Vector2(0.5f, 0f));

            headPoints.Points.Add(b1); //72
            AutodotsTexCords.Add(new Vector2(0f, 0f));

            headPoints.Points.Add((b1 + b2) * 0.5f); //73
            AutodotsTexCords.Add(new Vector2(0f, 0.5f));

            headPoints.Points.Add(b2); //74
            AutodotsTexCords.Add(new Vector2(0f, 1f));

            headPoints.Points.Add((b2 + b3) * 0.5f); //75
            AutodotsTexCords.Add(new Vector2(0.5f, 1f));

            headPoints.Points.Add(b3); //76
            AutodotsTexCords.Add(new Vector2(1f, 1f));

            headPoints.Points.Add((b3 + b) * 0.5f); //77
            AutodotsTexCords.Add(new Vector2(1f, 0.5f));

            headPoints.Points.Add(a1); //78
            headPoints.Points.Add(a2); //79

            foreach (var point in headPoints.Points)
            {
                headPoints.OriginalPoints.Add(point);
            }

            MirroredPoints.Add(72, 70);
            MirroredPoints.Add(73, 77);
            MirroredPoints.Add(74, 76);

            MirroredPoints.Add(70, 72);
            MirroredPoints.Add(77, 73);
            MirroredPoints.Add(76, 74);

            headPoints.IsVisible.AddRange(Enumerable.Repeat(true, 10));

            #region TrianglesFront
            // left oval
            //TrianglesFront.Add(new MorphTriangle { A = 52, B = 3, C = 68, Type = MorphTriangleType.Left });
            TrianglesFront.Add(new MorphTriangle {
                A = 52, B = 5, C = 68, Type = MorphTriangleType.Left
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 52, B = 66, C = 68, Type = MorphTriangleType.Left
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 66, B = 73, C = 68, Type = MorphTriangleType.Left
            });
            //TrianglesFront.Add(new MorphTriangle { A = 5, B = 3, C = 68, Type = MorphTriangleType.Left });
            TrianglesFront.Add(new MorphTriangle {
                A = 5, B = 52, C = 3, Type = MorphTriangleType.Left
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 5, B = 74, C = 68, Type = MorphTriangleType.Left
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 5, B = 3, C = 7, Type = MorphTriangleType.Left
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 5, B = 74, C = 7, Type = MorphTriangleType.Left
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 3, B = 58, C = 7, Type = MorphTriangleType.Left
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 9, B = 58, C = 7, Type = MorphTriangleType.Left
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 9, B = 58, C = 55, Type = MorphTriangleType.Left
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 9, B = 55, C = 11, Type = MorphTriangleType.Left
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 9, B = 7, C = 74, Type = MorphTriangleType.Left
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 45, B = 66, C = 43, Type = MorphTriangleType.Left
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 66, B = 52, C = 45, Type = MorphTriangleType.Left
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 73, B = 74, C = 68, Type = MorphTriangleType.Left
            });

            TrianglesFront.Add(new MorphTriangle {
                A = 9, B = 11, C = 75
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 74, B = 75, C = 9
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 23, B = 66, C = 43
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 72, B = 73, C = 12
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 72, B = 71, C = 16
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 66, B = 12, C = 23
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 66, B = 73, C = 12
            });

            //right oval
            //TrianglesFront.Add(new MorphTriangle { A = 4, B = 53, C = 69, Type = MorphTriangleType.Right });
            TrianglesFront.Add(new MorphTriangle {
                A = 69, B = 53, C = 6, Type = MorphTriangleType.Right
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 67, B = 53, C = 69, Type = MorphTriangleType.Right
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 67, B = 77, C = 69, Type = MorphTriangleType.Right
            });
            //TrianglesFront.Add(new MorphTriangle { A = 6, B = 4, C = 69, Type = MorphTriangleType.Right });
            TrianglesFront.Add(new MorphTriangle {
                A = 53, B = 4, C = 6, Type = MorphTriangleType.Right
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 6, B = 76, C = 69, Type = MorphTriangleType.Right
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 6, B = 4, C = 8, Type = MorphTriangleType.Right
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 6, B = 76, C = 8, Type = MorphTriangleType.Right
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 4, B = 59, C = 8, Type = MorphTriangleType.Right
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 10, B = 59, C = 8, Type = MorphTriangleType.Right
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 10, B = 59, C = 55, Type = MorphTriangleType.Right
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 10, B = 55, C = 11, Type = MorphTriangleType.Right
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 10, B = 8, C = 76, Type = MorphTriangleType.Right
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 46, B = 67, C = 44, Type = MorphTriangleType.Right
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 46, B = 53, C = 67, Type = MorphTriangleType.Right
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 76, B = 77, C = 69, Type = MorphTriangleType.Right
            });

            TrianglesFront.Add(new MorphTriangle {
                A = 10, B = 11, C = 75
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 75, B = 10, C = 76
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 67, B = 77, C = 15
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 26, B = 67, C = 44
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 70, B = 77, C = 15
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 26, B = 67, C = 15
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 71, B = 70, C = 17
            });

            //left eye
            TrianglesFront.Add(new MorphTriangle {
                A = 23, B = 35, C = 37
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 0, B = 35, C = 37
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 28, B = 35, C = 0
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 28, B = 36, C = 0
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 36, B = 24, C = 38
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 36, B = 0, C = 38
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 27, B = 0, C = 38
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 27, B = 0, C = 37
            });
            //left eyelash
            TrianglesFront.Add(new MorphTriangle {
                A = 23, B = 12, C = 18
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 18, B = 35, C = 23
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 18, B = 35, C = 16
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 28, B = 35, C = 16
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 28, B = 19, C = 16
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 28, B = 19, C = 36
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 13, B = 19, C = 36
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 24, B = 22, C = 13
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 13, B = 36, C = 24
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 38, B = 24, C = 43
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 37, B = 27, C = 43
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 37, B = 23, C = 43
            });

            //right eye
            TrianglesFront.Add(new MorphTriangle {
                A = 26, B = 40, C = 42
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 1, B = 40, C = 42
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 32, B = 40, C = 1
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 32, B = 39, C = 1
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 39, B = 25, C = 41
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 39, B = 1, C = 41
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 31, B = 1, C = 41
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 31, B = 1, C = 42
            });
            //right eyelash
            TrianglesFront.Add(new MorphTriangle {
                A = 26, B = 15, C = 21
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 21, B = 40, C = 26
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 21, B = 40, C = 17
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 32, B = 40, C = 17
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 32, B = 20, C = 17
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 32, B = 20, C = 39
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 14, B = 20, C = 39
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 25, B = 22, C = 14
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 14, B = 25, C = 39
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 25, B = 41, C = 44
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 31, B = 42, C = 44
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 26, B = 42, C = 44
            });

            //middle face
            TrianglesFront.Add(new MorphTriangle {
                A = 14, B = 22, C = 13
            });

            // Upper part
            TrianglesFront.Add(new MorphTriangle {
                A = 12, B = 18, C = 72
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 16, B = 18, C = 72
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 16, B = 19, C = 71
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 13, B = 19, C = 71
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 13, B = 14, C = 71
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 14, B = 20, C = 71
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 17, B = 20, C = 71
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 17, B = 21, C = 70
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 15, B = 21, C = 70
            });

            // nose
            TrianglesFront.Add(new MorphTriangle {
                A = 43, B = 22, C = 2
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 43, B = 45, C = 2
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 47, B = 45, C = 2
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 44, B = 22, C = 2
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 44, B = 46, C = 2
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 46, B = 48, C = 2
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 48, B = 49, C = 2
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 47, B = 49, C = 2
            });
            // nose-eyes
            TrianglesFront.Add(new MorphTriangle {
                A = 25, B = 22, C = 44
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 44, B = 41, C = 31
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 24, B = 22, C = 43
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 43, B = 38, C = 27
            });

            // left mouth
            TrianglesFront.Add(new MorphTriangle {
                A = 3, B = 52, C = 56
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 45, B = 52, C = 56
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 45, B = 47, C = 56
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 49, B = 47, C = 56
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 49, B = 54, C = 56
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 3, B = 60, C = 56
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 3, B = 60, C = 63
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 3, B = 58, C = 63
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 64, B = 58, C = 55
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 63, B = 61, C = 64
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 60, B = 54, C = 61
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 60, B = 54, C = 56
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 63, B = 64, C = 58
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 63, B = 60, C = 61
            });
            // right mouth
            TrianglesFront.Add(new MorphTriangle {
                A = 4, B = 53, C = 57
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 46, B = 53, C = 57
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 46, B = 48, C = 57
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 49, B = 48, C = 57
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 49, B = 54, C = 57
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 4, B = 62, C = 57
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 4, B = 62, C = 65
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 4, B = 59, C = 65
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 64, B = 59, C = 55
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 65, B = 61, C = 64
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 62, B = 54, C = 61
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 62, B = 54, C = 57
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 65, B = 64, C = 59
            });
            TrianglesFront.Add(new MorphTriangle {
                A = 65, B = 62, C = 61
            });

            #endregion

            #region Triangles right

            TrianglesRight.Add(new MorphTriangle {
                A = 5, B = 7, C = 78
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 9, B = 7, C = 78
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 9, B = 11, C = 78
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 11, B = 75, C = 78
            });
            //TrianglesRight.Add(new MorphTriangle { A = 5, B = 3, C = 68 });
            TrianglesRight.Add(new MorphTriangle {
                A = 5, B = 52, C = 3
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 66, B = 12, C = 79
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 66, B = 43, C = 45
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 66, B = 45, C = 68
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 50, B = 45, C = 68
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 50, B = 52, C = 68
            });
            //TrianglesRight.Add(new MorphTriangle { A = 68, B = 52, C = 3 });
            TrianglesRight.Add(new MorphTriangle {
                A = 68, B = 52, C = 5
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 5, B = 7, C = 3
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 7, B = 63, C = 3
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 55, B = 75, C = 11
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 55, B = 58, C = 11
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 9, B = 58, C = 11
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 9, B = 63, C = 7
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 63, B = 58, C = 9
            });

            TrianglesRight.Add(new MorphTriangle {
                A = 12, B = 79, C = 18
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 72, B = 79, C = 18
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 72, B = 16, C = 18
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 72, B = 16, C = 73
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 73, B = 13, C = 16
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 73, B = 13, C = 22
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 73, B = 2, C = 22
            });

            TrianglesRight.Add(new MorphTriangle {
                A = 2, B = 49, C = 47
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 2, B = 43, C = 47
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 45, B = 43, C = 47
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 45, B = 49, C = 47
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 50, B = 49, C = 45
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 50, B = 52, C = 56
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 3, B = 52, C = 56
            });

            TrianglesRight.Add(new MorphTriangle {
                A = 2, B = 43, C = 22
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 37, B = 43, C = 22
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 37, B = 43, C = 66
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 37, B = 23, C = 66
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 12, B = 23, C = 66
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 35, B = 23, C = 12
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 35, B = 23, C = 37
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 35, B = 22, C = 37
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 35, B = 13, C = 12
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 35, B = 13, C = 22
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 18, B = 13, C = 12
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 18, B = 13, C = 16
            });

            TrianglesRight.Add(new MorphTriangle {
                A = 49, B = 50, C = 56
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 49, B = 61, C = 56
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 3, B = 61, C = 56
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 3, B = 60, C = 63
            });

            TrianglesRight.Add(new MorphTriangle {
                A = 58, B = 64, C = 63
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 58, B = 64, C = 55
            });

            TrianglesRight.Add(new MorphTriangle {
                A = 49, B = 2, C = 75
            });                                                                         // сомнительные губищи
            TrianglesRight.Add(new MorphTriangle {
                A = 49, B = 61, C = 75
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 64, B = 61, C = 75
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 64, B = 55, C = 75
            });

            TrianglesRight.Add(new MorphTriangle {
                A = 60, B = 61, C = 63
            });
            TrianglesRight.Add(new MorphTriangle {
                A = 61, B = 64, C = 63
            });

            #endregion

            InitializeMorphin();
        }