void ImportGeometry(Collada141.geometry geometry) { var mesh = geometry.Item as Collada141.mesh; if (mesh == null) return; var float_array = mesh.source[0].Item as Collada141.float_array; this.Coordinates = new Vector3[float_array.Values.Length / 3]; for (int i = 0; i < Coordinates.Length; i++) { Coordinates[i] = new Vector3( (float)float_array.Values[i * 3 + 0], (float)float_array.Values[i * 3 + 1], (float)float_array.Values[i * 3 + 2]); } var poly_list = mesh.Items[0] as Collada141.polylist; if (poly_list == null) return; Triangle[] triangles = new Triangle[poly_list.count]; var raw_indices = Collada141.COLLADA.ConvertIntArray(poly_list.p); for (int i = 0; i < triangles.Length; i++) { triangles[i] = new Triangle() { MaterialID = 0, Vertex1 = (ushort)raw_indices[i * (3 * 2) + (0 * 2)], Vertex2 = (ushort)raw_indices[i * (3 * 2) + (1 * 2)], Vertex3 = (ushort)raw_indices[i * (3 * 2) + (2 * 2)], }; } List<ushort> triangle_indices = new List<ushort>(triangles.Length * 3); foreach (var triangle in triangles) { triangle_indices.AddRange(triangle.ToArray()); } Adjacencies adj = new Adjacencies(triangle_indices.ToArray()); this.Indices = adj.GenerateTriangleStrip(); this.Primitives = new MeshPrimitive[] { new MeshPrimitive(0, (ushort)Indices.Length) }; }
public void ImportFromCollada(Collada141.COLLADA collada) { var geometries = collada.Items.SingleOrDefault(x => x is Collada141.library_geometries) as Collada141.library_geometries; if (geometries == null) return; ImportGeometry(geometries.geometry[0]); }