def lookFrom(p):
    z = p
    x = normalized(cross([0, 0, 1], z))
    y = normalized(cross(z, x))
    invp = opp(mul([x, y, z], p))
    return [[x[0], x[1], x[2], invp[0]], [y[0], y[1], y[2], invp[1]], [z[0], z[1], z[2], invp[2]], [0, 0, 0, 1]]
def lookFrom(p):
    z = p
    x = normalized(cross([0, 0, 1], z))
    y = normalized(cross(z, x))
    invp = opp(mul([x, y, z], p))
    return [[x[0], x[1], x[2], invp[0]], [y[0], y[1], y[2], invp[1]], [z[0], z[1], z[2], invp[2]], [0, 0, 0, 1]]