public void BuildData(ref List <Model3D.MeshData> meshes) { finalMesh = newFinalMesh(); for (int t = 0; t < TempMeshes.Count; t++) { uint indexCount = 0; Model3D.MeshData md = new Model3D.MeshData(); Bitmap bmp = textureImages[t]; md.texture = ContentPipe.LoadTexture(ref bmp); md.texture.TextureParamS = textureInfo[t].wrapS; md.texture.TextureParamT = textureInfo[t].wrapT; TempMesh temp = TempMeshes[t]; for (int i = 0; i < temp.vertices.Count; i++) { int vExists = doesVertexAlreadyExist(t, temp.vertices[i], temp.texCoords[i], temp.colors[i]); if (vExists < 0) { Vector2 texCoord = temp.texCoords[i]; texCoord.X /= (float)bmp.Width * 32.0f; texCoord.Y /= (float)bmp.Height * 32.0f; temp.final.vertices.Add(temp.vertices[i]); temp.final.texCoords.Add(texCoord); temp.final.colors.Add(temp.colors[i]); temp.final.indices.Add(indexCount); indexCount++; } else { temp.final.indices.Add((uint)vExists); } } meshes.Add(md); } }
public void BuildData(List <Model3D.MeshData> meshes) { //TextureAtlasBuilder.TextureAtlas atlas = new TextureAtlasBuilder.TextureAtlas(textureImages); //atlas.outputToPNG("TestAtlas.png"); finalMesh = newFinalMesh(); for (int t = 0; t < TempMeshes.Count; t++) { uint indexCount = 0; meshes.Add(new Model3D.MeshData()); //if (t != 0) continue; //TextureAtlasBuilder.TextureAtlas.AtlasEntry atlasEntry = atlas.getEntryFromID((uint)t); Model3D.MeshData md = meshes[t]; md.texture = ContentPipe.LoadTexture(textureImages[t]); md.texture.TextureParamS = textureInfo[t].wrapS; md.texture.TextureParamT = textureInfo[t].wrapT; //Console.WriteLine("[Building]: " + (OpenTK.Graphics.OpenGL.All)md.texture.TextureParamS + "," +(OpenTK.Graphics.OpenGL.All)md.texture.TextureParamT); TempMesh temp = TempMeshes[t]; for (int i = 0; i < temp.vertices.Count; i++) { int vExists = doesVertexAlreadyExist(t, temp.vertices[i], temp.texCoords[i], temp.colors[i]); if (vExists < 0) { Vector2 texCoord = temp.texCoords[i]; texCoord.X /= (float)textureImages[t].Width * 32.0f; texCoord.Y /= (float)textureImages[t].Height * 32.0f; temp.final.vertices.Add(temp.vertices[i]); temp.final.texCoords.Add(texCoord); temp.final.colors.Add(temp.colors[i]); temp.final.indices.Add(indexCount); indexCount++; } else { temp.final.indices.Add((uint)vExists); } } } }
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); } }