tempo fa avevo una cosa fatta in QBASIC, sono riuscito a ripescarla 
nostalgicamente convertito in VB6, ecco il codice che genera un campo stellare 3D con movimento di camera 
perchè funzioni, devi mettere un Timer sul form.
codice:
Private Type star3
x As Double
y As Double
z As Double
v As Double
End Type
Private Type star2
x As Double
y As Double
End Type
Private Type camera
xan As Double
yan As Double
zan As Double
xve As Double
yve As Double
zve As Double
xac As Double
yac As Double
zac As Double
End Type
Dim CENTERX
Dim CENTERY
Dim STARS
Dim SCAL
Dim ACC
Dim DAMP
Dim s() As star3
Dim ss() As star2
Dim n As star3
Dim r As star3
Dim cam As camera
Sub APIXEL(wx As Double, wy As Double, c As Double)
x = Int(wx): y = Int(wy)
fx = wx - x: fy = wy - y
COL = c
COL1 = c / 2
PSet (x, y), RGB(COL, COL, COL)
PSet (x + 1, y), RGB(COL1, COL1, COL1)
PSet (x, y + 1), RGB(COL1, COL1, COL1)
PSet (x + 1, y + 1), RGB(COL1, COL1, COL1)
End Sub
Private Sub Form_Click()
Unload Me
End Sub
Private Sub Form_Load()
Me.ScaleMode = 3
Me.WindowState = 2
End Sub
Private Sub Form_Resize()
Me.BackColor = vbBlack
Me.Cls
CENTERX = Me.ScaleWidth / 2
CENTERY = Me.ScaleHeight / 2
STARS = 500
SCAL = 255
ACC = 0.00001
DAMP = 0.99
ReDim s(STARS)
ReDim ss(STARS)
Randomize Timer
For i = 0 To STARS
s(i).x = (Rnd * Me.ScaleWidth * 2) - Me.ScaleWidth
s(i).y = (Rnd * Me.ScaleHeight * 2) - Me.ScaleHeight
s(i).z = (Rnd * 100) + 900
s(i).v = (Rnd * 25) + 5
Next i
End Sub
Private Sub Timer1_Timer()
Static drawing As Boolean
If drawing Then Exit Sub
drawing = True
cam.xac = (cam.xac + (Rnd * ACC * 2) - ACC)
cam.yac = (cam.yac + (Rnd * ACC * 2) - ACC)
cam.zac = (cam.zac + (Rnd * ACC * 2) - ACC)
cam.xve = cam.xve + cam.xac
cam.yve = cam.yve + cam.yac
cam.zve = cam.zve + cam.zac
cam.xac = cam.xac * DAMP
cam.yac = cam.yac * DAMP
cam.zac = cam.zac * DAMP
cam.xve = cam.xve * DAMP
cam.yve = cam.yve * DAMP
cam.zve = cam.zve * DAMP
cam.xan = (cam.xan + cam.xve) * DAMP
cam.yan = (cam.yan + cam.yve) * DAMP
cam.zan = (cam.zan + cam.zve) * DAMP
For i = 0 To STARS
APIXEL ss(i).x, ss(i).y, 0
s(i).z = s(i).z - s(i).v
n.y = Cos(cam.xan) * s(i).y - Sin(cam.xan) * s(i).z
n.z = Sin(cam.xan) * s(i).y - Cos(cam.xan) * s(i).z
n.x = Cos(cam.yan) * s(i).x + Sin(cam.yan) * n.z
r.z = -Sin(cam.yan) * s(i).x + Cos(cam.yan) * n.z
r.x = Cos(cam.zan) * n.x - Sin(cam.zan) * n.y
r.y = Sin(cam.zan) * n.x + Cos(cam.zan) * n.y
ss(i).x = r.x / r.z * SCAL + CENTERX
ss(i).y = r.y / r.z * SCAL + CENTERY
If ss(i).x < 0 Or ss(i).x > CENTERX * 2 Or ss(i).y < 0 Or ss(i).y > CENTERY * 2 Or s(i).z < 1 Then
s(i).x = (Rnd * Me.ScaleWidth * 2) - Me.ScaleWidth
s(i).y = (Rnd * Me.ScaleHeight * 2) - Me.ScaleHeight
s(i).z = (Rnd * 100) + 900
s(i).v = (Rnd * 50) + 5
End If
APIXEL ss(i).x, ss(i).y, 255 - (s(i).z * (255 / Me.ScaleWidth))
Next
DoEvents
drawing = False
End Sub
Boolean