//---------------------------------------------------------------------------------------------------------

    private unsafe Vector3[] ExtractNormalsFromFrame(int frameNumber)
    {
        fixed(byte *pRawData = &RawFile[0])
        {
            MD2FrameData *pFrame = (MD2FrameData *)&pRawData[frameNumber * Header.framesize + Header.ofs_frames];

            Vector3[] normals = new Vector3[Header.num_xyz];

            for (int i = 0; i < Header.num_xyz; i++)
            {
                MD2Vertex md2Vertex = ((MD2Vertex *)&pFrame->verts)[i];
                normals[i] = MD2LightNormalIndex[md2Vertex.lightNormalIndex];
            }

            return(normals);
        }
    }
    //---------------------------------------------------------------------------------------------------------

    private unsafe Vector3[] ExtractVerticesFromFrame(int frameNumber)
    {
        fixed(byte *pRawData = &RawFile[0])
        {
            MD2FrameData *pFrame    = (MD2FrameData *)&pRawData[frameNumber * Header.framesize + Header.ofs_frames];
            Vector3       scale     = new Vector3(pFrame->scale[0], pFrame->scale[1], pFrame->scale[2]);
            Vector3       translate = new Vector3(pFrame->translate[0], pFrame->translate[1], pFrame->translate[2]);

            Vector3[] vertices = new Vector3[Header.num_xyz];

            for (int i = 0; i < Header.num_xyz; i++)
            {
                MD2Vertex md2Vertex = ((MD2Vertex *)&pFrame->verts)[i];
                Vector3   vertex;
                vertex.x    = -(md2Vertex.y * scale.y + translate.y);
                vertex.z    = md2Vertex.x * scale.x + translate.x;
                vertex.y    = md2Vertex.z * scale.z + translate.z;
                vertices[i] = vertex;
            }

            return(vertices);
        }
    }