def METHOD_NAME(path):
    f = open(path)
    objects = {}
    cur_object = None
    mtls = None
    v_list = []
    vt_list = []
    vn_list = []
    for l in f:
        l = l.split()
        if not l or l[0].startswith('#'):
            continue
        # Load materials from file
        if l[0] == 'mtllib':
            mtls = parse_mtl(os.path.dirname(path) + '/' + l[1])
        # Use material
        elif l[0] == 'usemtl':
            cur_object.mtl_list.append([mtls[l[1]], len(cur_object.vertices) // 8, 0])
        # Smoothing
        elif l[0] == 's':
            pass
        # Face
        elif l[0] == 'f':
            for i in l[1:4]:
                v, vt, vn = (int(j or 0) for j in i.split('/'))
                cur_object.vertices.extend(v_list[v - 1])
                if (vt == 0):
                    cur_object.vertices.extend((0, 0))
                else:
                    cur_object.vertices.extend(vt_list[vt - 1])
                cur_object.vertices.extend(vn_list[vn - 1])
            cur_object.mtl_list[-1][2] += 3
        # Vertex
        elif l[0] == 'v':
            v_list.append(load_vector(l[1:4]))
        # Texture vertex
        elif l[0] == 'vt':
            vt_list.append(load_vector(l[1:3]))
        # Vertex normal
        elif l[0] == 'vn':
            vn_list.append(load_normal(l[1:4]))
        # Object
        elif l[0] == 'o':
            cur_object = Object()
            objects[l[1]] = cur_object
        # Ignore lines
        elif l[0] == 'l':
            pass
        else:
            print(f"Ignoring {l[0]}")
    return objects