/// <summary> /// 面リストを生成します。 /// </summary> /// <returns>面リスト</returns> public static List <TSOFace> CreateFaces(TSOMesh mesh) { List <TSOFace> faces = new List <TSOFace>(); foreach (TSOSubMesh sub in mesh.sub_meshes) { UnifiedPositionVertex[] vertices = new UnifiedPositionVertex[sub.vertices.Length]; for (int i = 0; i < vertices.Length; i++) { vertices[i] = new UnifiedPositionVertex(sub.vertices[i], sub.bone_indices, sub.spec); } for (int i = 2; i < vertices.Length; i++) { UnifiedPositionVertex a, b, c; if (i % 2 != 0) { a = vertices[i - 2]; b = vertices[i - 0]; c = vertices[i - 1]; } else { a = vertices[i - 2]; b = vertices[i - 1]; c = vertices[i - 0]; } if (!a.Equals(b) && !b.Equals(c) && !c.Equals(a)) { faces.Add(new TSOFace(a, b, c)); } } } return(faces); }
/// <summary> /// 等値関数 /// </summary> /// <param name="v">v</param> /// <returns></returns> public bool Equals(UnifiedPositionVertex v) { if ((object)v == null) { return(false); } return(this.position == v.position); }
/// <summary> /// 面を生成します。 /// </summary> /// <param name="a">頂点a</param> /// <param name="b">頂点b</param> /// <param name="c">頂点c</param> public TSOFace(UnifiedPositionVertex a, UnifiedPositionVertex b, UnifiedPositionVertex c) { this.a = a; this.b = b; this.c = c; this.spec = a.spec; vertices = new UnifiedPositionVertex[3]; vertices[0] = a; vertices[1] = b; vertices[2] = c; }
/// <summary> /// 等値関数 /// </summary> /// <param name="obj">object</param> /// <returns></returns> public override bool Equals(object obj) { if (obj == null) { return(false); } UnifiedPositionVertex v = obj as UnifiedPositionVertex; if ((object)v == null) { return(false); } return(this.position == v.position); }
/// <summary> /// 比較関数 /// </summary> /// <param name="obj">object</param> /// <returns></returns> public int CompareTo(object obj) { UnifiedPositionVertex v = obj as UnifiedPositionVertex; if ((object)v == null) { throw new ArgumentException("not a UnifiedPositionVertex"); } int cmp = this.position.X.CompareTo(v.position.X); if (cmp == 0) { cmp = this.position.Y.CompareTo(v.position.Y); } if (cmp == 0) { cmp = this.position.Z.CompareTo(v.position.Z); } return(cmp); }
public UnifiedPositionTexcoordVertex(UnifiedPositionVertex v, Dictionary <int, ushort> bone_idmap) { this.position = v.position; this.normal = v.normal; this.u = v.u; this.v = v.v; this.skin_weights = new SkinWeight[4]; for (int i = 0; i < 4; i++) { if (v.skin_weights[i].weight < WeightEpsilon) { this.skin_weights[i] = new SkinWeight(0, 0.0f); } else { this.skin_weights[i] = new SkinWeight(bone_idmap[v.skin_weights[i].bone_index], v.skin_weights[i].weight); } } GenerateBoneIndices(); }
public static UnifiedPositionTexcoordVertex CreateVertex(UnifiedPositionVertex v, Dictionary <int, ushort> bone_idmap) { UnifiedPositionTexcoordVertex a = new UnifiedPositionTexcoordVertex(v, bone_idmap); return(a); }