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(); }
public Matrix3 Translate(Point3 p) { rows[3] += p; return this; }
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; }
public static Matrix3 Translation(Point3 p) { return new Matrix3(Point3.XAxis, Point3.YAxis, Point3.ZAxis, p); }
public Matrix3(Point3 r0, Point3 r1, Point3 r2) : this(r0, r1, r2, Point3.Origin) { }
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; }
public void Move(Point3 pt, TimeValue t) { _Node.Move(t, Matrix3.Identity.Translate(pt)._IMatrix3, pt._IPoint3, false, true, (int)PivotMode.None, false); }
public void Move(Point3 pt) { Move(pt, Kernel.Now); }
public void SetRGBColor(TimeValue t, Color rgb) { Point3 p3 = new Point3(rgb.r, rgb.g, rgb.b); _Light.SetRGBColor(t, p3._IPoint3); }