public static Geometry Polylist(string geoID, string geoName, string matName, GeometryDataType[] dataTypes, float[][] data, ulong[] channels, Semantic[] semantics, ulong[] dataSources, ulong[] sets, int[] vCount, int[] primitives) { int maxLength = Math.Min((int)data.Length, (int)dataTypes.Length); Mesh mesh = new Mesh(); mesh.source = new Source[0]; Polylist polylist = new Polylist((ulong)vCount.Length, matName, vCount, primitives); polylist.input = new InputOffset[0]; // ! ! ! ! // separate adding data and adding semantic inputs into two loops/steps // -> add a GeometryDataType enumeration to identify each data array as a specific data (Vertex, Normal, Texcoord, Colors) // -> and the Semantic which generates the "input" types for the composed vertex data which is generated by the primitive list for (int i = 0; i < maxLength; i++) { DAEGeometry.AppendDataSource(mesh, geoName, dataTypes[i], data[i], channels[i]); } for (int i = 0; i < maxLength; i++) { DAEGeometry.AppendPolylistSemantic(polylist, geoName, semantics[i], dataSources[i], sets[i]); } mesh.primitives = new object[] { polylist }; Geometry geo = new Geometry(geoID, geoName, mesh); return(geo); }
// move to MeshDAE class (and make it an instance-method instead of static public static void AppendPolylist(string geoName, string matName, DAEGeometryInputSemanticInfo[] semanticsInfos, int[] vCount, int[] primitives, Mesh mesh) { if (mesh == null) { return; } ulong polylistIndex = DAEGeometry.ExpandItems(mesh); Polylist polylist = new Polylist((ulong)vCount.Length, matName, vCount, primitives); polylist.input = new InputOffset[0]; for (int i = 0; i < semanticsInfos.Length; i++) { DAEGeometry.AppendPolylistSemantic(polylist, geoName, semanticsInfos[i].Semantic, semanticsInfos[i].DataSourceIndex, semanticsInfos[i].SetIndex); } mesh.primitives[polylistIndex] = polylist; }
public static Geometry Polylist(string geoID, string geoName, string matName, DAEGeometryDataSourceInfo[] dataSourceInfos, float[][] data, DAEGeometryInputSemanticInfo[] semanticsInfos, int[] vCount, int[] primitives) { int maxLength = Math.Min((int)data.Length, (int)dataSourceInfos.Length); Mesh mesh = new Mesh(); mesh.source = new Source[0]; Polylist polylist = new Polylist((ulong)vCount.Length, matName, vCount, primitives); polylist.input = new InputOffset[0]; for (int i = 0; i < maxLength; i++) { DAEGeometry.AppendDataSource(mesh, geoName, dataSourceInfos[i].Type, data[i], dataSourceInfos[i].Index); } for (int i = 0; i < semanticsInfos.Length; i++) { DAEGeometry.AppendPolylistSemantic(polylist, geoName, semanticsInfos[i].Semantic, semanticsInfos[i].DataSourceIndex, semanticsInfos[i].SetIndex); } mesh.primitives = new object[] { polylist }; Geometry geo = new Geometry(geoID, geoName, mesh); return(geo); }