Given an equation of a parametric surface, is there a general way to sample of points uniformly distributed on that surface?

I'm interested in this problem for purposes of visualisation - rather than attempting to attempt to triangulate the surface and display with polygons, display a dense sample of points. This makes it easier to generalise to >3d.

Here's an example of a surface I'd like to display: the Klein bottle.

```
u = [-pi, pi]
v = [-pi, pi]
x1 = (r * cos(v) + a) * cos(u),
x2 = (r * cos(v) + a) * sin(u),
x3 = r * sin(v) * cos(u/2),
x4 = r * sin(v) * sin(u/2)
```

(where r and a are parameters that control the shape of the overall surface)