Example #1
0
        internal Mesh(IMesh m)
        {            
            faces = new Face[m.NumFaces];
            for (int i = 0; i < m.NumFaces; ++i)
                faces[i] = new Face(m.Faces[i]);

            verts = new Point3[m.NumVerts];
            for (int i = 0; i < m.NumVerts; ++i)
                verts[i] = new Point3(m.Verts[i]);

            tfaces = new Face[m.NumFaces];
            for (int i = 0; i < m.NumFaces; ++i)
                tfaces[i] = new Face(m.Faces[i]);

            tverts = new Point3[m.NumTVerts];
            for (int i = 0; i < m.NumTVerts; ++i)
                tverts[i] = new Point3(m.TVerts[i]);

            fnormals = new Point3[m.NumFaces];
            vnormals = new Point3[m.NumVerts];

            for (int i = 0; i < m.NumVerts; ++i)
                vnormals[i] = Point3.Origin;
            
            // Compute vertex normals ignoring smoothing groups
            // Each vertex normal is the average of the face normals.
            for (int i = 0; i < m.NumFaces; ++i)
            {
                uint a = faces[i].a;
                uint b = faces[i].b;
                uint c = faces[i].c;
                Point3 va = verts[a];
                Point3 vb = verts[b];
                Point3 vc = verts[c];
                Point3 fnorm = (vb - va) ^ (vc - vb);
                vnormals[a] += fnorm;
                vnormals[b] += fnorm;
                vnormals[c] += fnorm;
                fnormals[i] = fnorm.Normalized;
            }

            // Last step is to normalize the vector normals.
            for (int i = 0; i < m.NumVerts; ++i)
                vnormals[i].Normalize();
        }
Example #2
0
 public Matrix3 Translate(Point3 p)
 {
     rows[3] += p;
     return this;
 }
Example #3
0
        public static Point3 operator *(Point3 lhs, Matrix3 rhs)
        {
            Point3 res = new Point3();
            res[0] = lhs[0] * rhs[0][0] + lhs[1] * rhs[1][0] + lhs[2] * rhs[2][0] + rhs[3][0];
            res[1] = lhs[0] * rhs[0][1] + lhs[1] * rhs[1][1] + lhs[2] * rhs[2][1] + rhs[3][1];
            res[2] = lhs[0] * rhs[0][2] + lhs[1] * rhs[1][2] + lhs[2] * rhs[2][2] + rhs[3][2];

            return res;
        }
Example #4
0
 public static Matrix3 Translation(Point3 p)
 {
     return new Matrix3(Point3.XAxis, Point3.YAxis, Point3.ZAxis, p);
 }
Example #5
0
 public Matrix3(Point3 r0, Point3 r1, Point3 r2)
     : this(r0, r1, r2, Point3.Origin)
 {
 }
Example #6
0
 public Matrix3(Point3 r0, Point3 r1, Point3 r2, Point3 r3)
 {
     rows = new Point3[4];
     rows[0] = r0;
     rows[1] = r1;
     rows[2] = r2;
     rows[3] = r3;
 }
Example #7
0
 public void Move(Point3 pt, TimeValue t)
 {
     _Node.Move(t, Matrix3.Identity.Translate(pt)._IMatrix3, pt._IPoint3, false, true, (int)PivotMode.None, false);
 }
Example #8
0
 public void Move(Point3 pt)
 {
     Move(pt, Kernel.Now);
 }
Example #9
0
 public void SetRGBColor(TimeValue t, Color rgb)
 {
     Point3 p3 = new Point3(rgb.r, rgb.g, rgb.b);
     _Light.SetRGBColor(t, p3._IPoint3); 
 }