One way to do it would be simply expanding your algorithm to 3D
Create a sphere mesh (Make Object Sphere) with a radius of the lowest point on your asteroid, then loop through each vertex and multiply the normals by a scalar (between 1 to the maximum radius) and add the result to the vertex position. Someone correct me if I got that wrong
Pseudo-code:
Make Object Sphere ObjID, 1.0, 50, 50
Lock Vertexdata For Limb ObjID, 0
For v = 0 to Get Vertexdata Vertex Count() - 1
rem From 1.0 - 1.5
Scalar# = ( rnd( 50 ) / 100.0 ) + 1.0
NormalX# = Get Vertexdata Normals X( v )
NormalY# = Get Vertexdata Normals Y( v )
NormalZ# = Get Vertexdata Normals Z( v )
PosX# = Get Vertexdata Position X( v )
PosY# = Get Vertexdata Position Y( v )
PosZ# = Get Vertexdata Position Z( v )
Set Vertexdata Position v, PosX# + ( NormalX# * Scalar# ), PosY# + ( NormalY# * Scalar# ), PosZ# + ( NormalZ# * Scalar# )
Next
You could probably extend this code so that the surface is smoother by generating the scalars in an array and smoothing them out in a second pass. There is code similar to this for matrix terrains somewhere on the codebase.
Hope I helped