예제 #1
0
    //---------------------------------------------------------------------------------------------------------

    private unsafe Mesh ConvertFrameToMesh(MD2Frame frame)
    {
        List <Vector3> newVertices  = new List <Vector3>();
        List <Vector3> newNormals   = new List <Vector3>();
        List <Vector2> newUVs       = new List <Vector2>();
        List <int>     newTriangles = new List <int>();

        for (int t = 0; t < frame.Triagles.Length; t++)
        {
            MD2Triangle triagle = frame.Triagles[t];

            for (int i = 0; i < 3; i++)
            {
                Vector3 vertex = frame.Vertices[triagle.index_xyz[i]];
                Vector3 normal = frame.Normals[triagle.index_xyz[i]];
                Vector2 uv     = frame.UVs[triagle.index_st[i]];

                bool doesExistsSuchVertex = false;
                int  index = 0;

                for (index = 0; index < newVertices.Count; index++)
                {
                    if (newVertices[index] == vertex && newUVs[index] == uv && newNormals[index] == normal)
                    {
                        doesExistsSuchVertex = true;
                        break;
                    }
                }

                newTriangles.Add(index);

                if (doesExistsSuchVertex == false)
                {
                    newVertices.Add(vertex);
                    newNormals.Add(normal);
                    newUVs.Add(uv);
                }
            }
        }

        Mesh mesh = new Mesh();

        mesh.Clear();
        mesh.vertices  = newVertices.ToArray();
        mesh.normals   = newNormals.ToArray();
        mesh.uv        = newUVs.ToArray();
        mesh.triangles = newTriangles.ToArray();
        mesh.RecalculateBounds();
        mesh.name = frame.Name;

        return(mesh);
    }
    //---------------------------------------------------------------------------------------------------------

    private unsafe MD2Triangle[] ExtractAllTringles()
    {
        fixed(byte *pRawData = &RawFile[0])
        {
            MD2Triangle[] triangles = new MD2Triangle[Header.num_tris];

            for (int i = 0; i < Header.num_tris; i++)
            {
                MD2Triangle *pTriangle = (MD2Triangle *)&pRawData[i * sizeof(MD2Triangle) + Header.ofs_tris];
                triangles[i] = *pTriangle;
            }

            return(triangles);
        }
    }