Ejemplo n.º 1
0
 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);
     }
 }
Ejemplo n.º 2
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }