Esempio n. 1
0
        protected void DiscontinuityConstraint(int vertI, int vertJ, List <int> faceList)
        {
            foreach (var faceId in faceList)
            {
                var orig = new MxVector3(model.Vertex(vertI));
                var dest = new MxVector3(model.Vertex(vertJ));
                var edge = dest - orig;

                var nml = new[] { 0.0, 0.0, 0.0 };
                model.ComputeFaceNormal(faceId, ref nml);
                var n = new MxVector3(nml);

                var n2 = edge ^ n;
                MxVector3.Unitize(ref n2);

                var quad = new MxQuadric3(n2, -(n2 * orig));
                quad *= BoundaryWeight;

                if (WeightingPolicy == MxWeighting.Area || WeightingPolicy == MxWeighting.AreaAverage)
                {
                    quad.Area = MxVector3.Norm(edge);
                    quad     *= quad.Area;
                }

                quadrics[vertI] += quad;
                quadrics[vertJ] += quad;
            }
        }
Esempio n. 2
0
        internal static MxVector3 TriangleNormal(MxVector3 v1, MxVector3 v2, MxVector3 v3)
        {
            var n = TriangleRawNormal(v1, v2, v3);

            MxVector3.Unitize(ref n);
            return(n);
        }
Esempio n. 3
0
        internal static MxMatrix4 LookAtMatrix(MxVector3 from, MxVector3 at, MxVector3 up)
        {
            var vUp = new MxVector3(up[0], up[1], up[2]);

            MxVector3.Unitize(ref vUp);
            var f = at - from;

            MxVector3.Unitize(ref f);

            var s = f ^ vUp;

            MxVector3.Unitize(ref s);
            var u = s ^ f;

            MxVector3.Unitize(ref u);

            var mat = new MxMatrix4(new MxVector4(s, 0.0), new MxVector4(u, 0.0), new MxVector4(-f, 0.0),
                                    new MxVector4(0.0, 0.0, 0.0, 1.0));

            return(mat * TranslationMatrix(-from));
        }