Bouton droit de la souris pour quitter

- Code: Tout sélectionner
' **********************************
' * DEPTH COLORED 3D DOT BALL *
' **********************************
' * ORIGNAL BLITZ CODE BY: TRACER *
' * ADAPTED TO GFW BY: FANTOMAS *
' **********************************
dots_in_ball% = 1440 ' Nombre de points de la sphère
numpoints% = dots_in_ball% ' Numbre de points dans la table.
distance% = 400 ' Utilisé pour la perspective.
' --- Tableau utilisés pour 3D
DIM points%(numpoints%, 3)
OPENW #1,100,100,640,480,$30
' --------------------------------------------
' Gestion des écrans Logique/Physique
' --------------------------------------------
HiddenBMP1& = CREATEBMP(640,480) ' Crée un bitmap de 640x480 en mémoire
HiddenDC1& = MEMDC(_DC(1)) ' Compatibles avec l'écran "physique"
SETBMP HiddenDC1&,HiddenBMP1&
SETDC HiddenDC1&
RGBCOLOR RGB(0,0,0)
DEFFILL 0
PBOX 0,0,640,480
' --- Calcul des points de la surface de la sphère:
' x = cos(theta) * cos(phi)
' y = cos(theta) * sin(phi)
' z = sin(theta)
' ou theta = -90 to 90
' et phi = 0 to 360
FOR t = 1 TO dots_in_ball%
xd = RANDOM (180) - 90
x0 = (COS(xd) * 10) * (COS(t) * 10)
y0 = (COS(xd) * 10) * (SIN(t) * 10)
z0 = SIN(xd) * 100
points%(t,1) = x0
points%(t,2) = y0
points%(t,3) = z0
NEXT t
' --- Boucle jusqu'à clic droit souris:
REPEAT
' Efface écran logique:
RGBCOLOR RGB(0,0,0)
DEFFILL 0
PBOX 180,100,460,380
' --- Calcul des points:
vx = vx + 0.0125 ' vitesse de rotation X
vy = vy + 0.0125 ' vitesse de rotation Y
vz = vz + 0.0125 ' vitesse de rotation Z
FOR n% = 1 TO numpoints%
x3d = points%(n%, 1)
y3d = points%(n%, 2)
z3d = points%(n%, 3)
ty = ((y3d * COS(vx)) - (z3d * SIN(vx)))
tz = ((y3d * SIN(vx)) + (z3d * COS(vx)))
tx = ((x3d * COS(vy)) - (tz * SIN(vy)))
tz = ((x3d * SIN(vy)) + (tz * COS(vy)))
ox = tx
tx = ((tx * COS(vz)) - (ty * SIN(vz)))
ty = ((ox * SIN(vz)) + (ty * COS(vz)))
nx% = 320 + 512 * (tx) / (distance% - (tz))
ny% = 240 - (512 * ty) / (distance% - (tz))
' --- Regarde la valeur de z du pixel (profondeur)
' et définit la couleur correspondante:
IF tz <= 100 AND tz >= 75
RGBCOLOR RGB(250,250,250)
ELSE
IF tz <= 75 AND tz >= 50
RGBCOLOR RGB(225,225,225)
ELSE
IF tz <= 50 AND tz >= 25
RGBCOLOR RGB(200,200,200)
ELSE
IF tz <= 25 AND tz >= 0
RGBCOLOR RGB(175,175,175)
ELSE
IF tz <= 0 AND tz >= -25
RGBCOLOR RGB(150,150,150)
ELSE
IF tz <= -25 AND tz >= -50
RGBCOLOR RGB(125,125,125)
ELSE
IF tz <= -50 AND tz >= -75
RGBCOLOR RGB(100,100,100)
ELSE
IF tz <= -75 AND tz >= -100
RGBCOLOR RGB(50,50,50)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
' --- Affiche le point:
PLOT nx%,ny%
NEXT n%
' --- Transfert ecran logique dans ecran physique:
BITBLT HiddenDC1&,0,0,640,480,_DC(1),0,0,SRCCOPY
UNTIL MOUSEK = 2
SETDC _DC(1)
CLOSEW #1
END
Fantomas