public void BuildData(List <Model3D.MeshData> meshes) { if (meshes.Count != 0) { System.Console.WriteLine("duplicate"); } { int target_c = (int)TempMeshes.count + meshes.Count; if (meshes.Capacity < target_c) { meshes.Capacity = target_c; } } Dictionary <TempVertex, TempVertex> vert_temp = null; Model3D.MeshData md; TempMesh mesh_iter; TempVertex vert_iter; uint mesh_iter_n, vert_iter_n, next_ind, u_pos; int v_count; float fw, fh; for (mesh_iter = TempMeshes.first, mesh_iter_n = TempMeshes.count; 0 != mesh_iter_n; mesh_iter = mesh_iter.next, --mesh_iter_n) { v_count = null == (object)( vert_temp = TempVertex.Process(ref mesh_iter.references.list, utilize: vert_temp) ) ? 0 : vert_temp.Count; md = new Model3D.MeshData() { vertices = new Vector3[v_count], normals = new Vector3[v_count], colors = new Vector4[v_count], texCoord = new Vector2[v_count], indices = new uint[mesh_iter.references.list.count], texture = ContentPipe.LoadTexture( mesh_iter.references.bmp, mesh_iter.value.info.wrapS, mesh_iter.value.info.wrapT), material = mesh_iter.value.getMaterial(), }; fw = ((uint)mesh_iter.references.bmp.Width << 5); fh = ((uint)mesh_iter.references.bmp.Height << 5); for ( u_pos = 0, next_ind = 0, vert_iter = mesh_iter.references.list.first, vert_iter_n = mesh_iter.references.list.count; 0 != vert_iter_n; vert_iter = vert_iter.next, u_pos++, --vert_iter_n) { md.indices[u_pos] = vert_iter.index; if (vert_iter.index != next_ind) { continue; } md.vertices[next_ind] = vert_iter.value.position; md.texCoord[next_ind].X = vert_iter.value.texCoord.X / fw; md.texCoord[next_ind].Y = vert_iter.value.texCoord.Y / fh; md.normals[next_ind] = vert_iter.value.normal; md.colors[next_ind] = vert_iter.value.color; next_ind++; } meshes.Add(md); } }