Here is a small prog, i just thought up
It looks a bit like smoke being blown around in the air
set display mode 1024,768,16:sync on:hide mouse:autocam off
randomize timer()
dim ox#(1331,2):dim oy#(1331,2):dim oz#(1331,2)
for x=0 to 10
for y=0 to 10
for z=0 to 10
oc=oc+1:make object sphere oc,2
position object oc,x+45,y+45,z+45
ox#(oc,1)=x+45:oy#(oc,1)=y+45:oz#(oc,1)=z+45
next z
next y
next x
do
fx#=rnd(900)+100:fy#=rnd(900)+100:fz#=rnd(900)+100
fx#=fx#/300:fy#=fy#/300:fz#=fz#/300
for i=1 to 700
cx#=0:cy#=0:cz#=0
for n=1 to oc
x#=object position x(n)
y#=object position y(n)
z#=object position z(n)
dx#=(sin(wrapvalue(fy#*y#))+sin(wrapvalue(fz#*z#)))
dy#=(sin(wrapvalue(fx#*x#))+sin(wrapvalue(fz#*z#)))
dz#=(sin(wrapvalue(fx#*x#))+sin(wrapvalue(fy#*y#)))
x#=x#+dx#:y#=y#+dy#:z#=z#+dz#
position object n,x#,y#,z#
cx#=cx#+x#:cy#=cy#+y#:cz#=cz#+z#
next n
cx#=cx#/1331:cy#=cy#/1331:cz#=cz#/1331
position camera cx#,cy#,cz#-200:point camera cx#,cy#,cz#
sync
next i
for n=1 to 1331
ox#(n,2)=object position x(n)
oy#(n,2)=object position y(n)
oz#(n,2)=object position z(n)
next n
for n=0 to 200
cx#=0:cy#=0:cz#=0
for m=1 to 1331
x#=(ox#(m,1)*n+ox#(m,2)*(200-n))/200
y#=(oy#(m,1)*n+oy#(m,2)*(200-n))/200
z#=(oz#(m,1)*n+oz#(m,2)*(200-n))/200
position object m,x#,y#,z#
cx#=cx#+x#:cy#=cy#+y#:cz#=cz#+z#
next m
cx#=cx#/1331:cy#=cy#/1331:cz#=cz#/1331
position camera cx#,cy#,cz#-200:point camera cx#,cy#,cz#
sync
next n
loop
The last word in this sentence is wrong