Page 1 sur 1

Dots Tunnel

Publié : ven. 02/sept./2005 4:22
par garzul
Bonjour !

Je voudrai savoir comment faire en PureBasic un effet comme celui - la :

Image

J'ai essayé d'en faire un mais je n'y arrive pas ! Pourtant le principe est assez simple et claire il faut dessiner un cercle puis fait grossir son rayon et appliquer pour chaque cercle un mouvement sinusoidale mais je n'y arrive pas :(

Publié : ven. 02/sept./2005 6:49
par djes
Tu oublies l'effet de perspective, c'est surtout ça le principe!
En gros c'est x=(x*d)/(d+ppd+z), et y=(y*d)/(d+ppd+z)
avec d:distance de l'oeil et ppd: effet de persp.
Tu peux aussi faire plus simple avec x=x/z et y=y/z

Publié : ven. 02/sept./2005 17:12
par garzul
Merci beaucoup ! :)

Publié : lun. 05/déc./2005 20:16
par garzul
Bon j'ai enfin tester et voila le résultat de mes tests ^^ :

Un effet assez sympa que j'ai voulu garder (les couleurs sont barbares ;)) :

Code : Tout sélectionner

; --------------------------------------------------
; - Auteur            : Garzul                     -
; - Date              : 5 Décembre 2005            -
; - Type de programme : Effets                     -
; - Version de PB     : PureBasic v3.92            -
; --------------------------------------------------



; Initialisation :
InitSprite() : InitKeyboard()

OpenScreen(1024,768,32,"")

angle.f = 0.0
D       = 100
PPD     = 100
X       = 512+(X*D)/(D+PPD+Z)
Y       = 360+(Y*D)/(D+PPD+Z) 
Z       = (Cos(Sqr(((X * X) + (Y * Y)) / 2 )))
Rayon   = 50


; Boucle
Repeat

ExamineKeyboard()
ClearScreen(0,0,0)


; DrawTunnel ;)
StartDrawing(ScreenOutput())

DrawingMode(4)
For i=0 To 200 Step 2

 Circle(X+i*Cos(angle+Sin(Sqr(i))),Y+i*Sin(angle+Cos(Sqr(i))),Rayon+i,RGB(X-i,Y,X-i))

Next i

StopDrawing()

angle + 0.02



FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)

La on voit mieux le tunnel est ca ressemble beaucoup plus à un tunnel ;) :

Code : Tout sélectionner

; --------------------------------------------------
; - Auteur            : Garzul                     -
; - Date              : 5 Décembre 2005            -
; - Type de programme : Effets                     -
; - Version de PB     : PureBasic v3.92            -
; --------------------------------------------------



; Initialisation :
InitSprite() : InitKeyboard()

OpenScreen(1024,768,32,"")

angle.f = 0.0
D       = 100
PPD     = 100
X       = 512+(X*D)/(D+PPD+Z)
Y       = 360+(Y*D)/(D+PPD+Z) 
Z       = (Cos(Sqr(((X * X) + (Y * Y)) / 2 )))
Rayon   = 50


; Boucle
Repeat

ExamineKeyboard()
ClearScreen(0,0,0)


; DrawTunnel ;)
StartDrawing(ScreenOutput())

DrawingMode(4)
For i=0 To 200 Step 2

 Circle(X+i*Cos(angle+Sin(Sqr(i))),Y+i*sin(angle),Rayon+i,RGB(X-i,Y,X-i))

;*Sin(angle+Cos(Sqr(i))) <== mémo ;)

Next i

StopDrawing()

angle + 0.02



FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)

Un autre effet sympathique ou disparaisse et réaparaissent des cercles :) :

Code : Tout sélectionner

; --------------------------------------------------
; - Auteur            : Garzul                     -
; - Date              : 5 Décembre 2005            -
; - Type de programme : Effets                     -
; - Version de PB     : PureBasic v3.92            -
; --------------------------------------------------



; Initialisation :
InitSprite() : InitKeyboard()

OpenScreen(1024,768,32,"")

angle.f = 0.0
D       = 100
PPD     = 100
X       = 512+(X*D)/(D+PPD+Z)
Y       = 360+(Y*D)/(D+PPD+Z) 
Z       = (Cos(Sqr(((X * X) + (Y * Y)) / 2 )))
Rayon   = 50


; Boucle
Repeat

ExamineKeyboard()
ClearScreen(0,0,0)


; DrawTunnel ;)
StartDrawing(ScreenOutput())

DrawingMode(4)
For i=0 To 200 Step 2

 Circle(X+i*Cos(angle+Sin(Sqr(i))),Y+i*Sin(angle+Cos(Sqr(i))),Rayon+i*Sin(angle+Cos(Sqr(i))),RGB(X-i,Y,X-i))

;*Sin(angle+Cos(Sqr(i))) <== mémo ;)

Next i

StopDrawing()

angle + 0.02



FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)

Une simple spirale :

Code : Tout sélectionner

; --------------------------------------------------
; - Auteur            : Garzul                     -
; - Date              : 5 Décembre 2005            -
; - Type de programme : Effets                     -
; - Version de PB     : PureBasic v3.92            -
; --------------------------------------------------



; Initialisation :
InitSprite() : InitKeyboard()

OpenScreen(1024,768,32,"")

angle.f = 0.0
D       = 100
PPD     = 100
X       = 512+(X*D)/(D+PPD+Z)
Y       = 360+(Y*D)/(D+PPD+Z) 
Z       = (Cos(Sqr(((X * X) + (Y * Y)) / 2 )))
Rayon   = 50


; Boucle
Repeat

ExamineKeyboard()
ClearScreen(0,0,0)


; DrawTunnel ;)
StartDrawing(ScreenOutput())

DrawingMode(4)
For i=0 To 200 Step 2

 Circle(X+i*Cos(Sqr(i)+angle),Y+i*Sin(Sqr(i)+angle),Rayon+i,RGB(X-i,Y,X-i))

;*Sin(angle+Cos(Sqr(i))) <== mémo ;)

Next i

StopDrawing()

angle + 0.02



FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)

Le fameux tunnel :) :

Code : Tout sélectionner

; --------------------------------------------------
; - Auteur            : Garzul                     -
; - Date              : 5 Décembre 2005            -
; - Type de programme : Effets                     -
; - Version de PB     : PureBasic v3.92            -
; --------------------------------------------------



; Initialisation :
InitSprite() : InitKeyboard()

OpenScreen(1024,768,32,"")

angle.f = 0.0
D       = 100
PPD     = 100
X       = 512+(X*D)/(D+PPD+Z)
Y       = 360+(Y*D)/(D+PPD+Z) 
Z       = (Cos(Sqr(((X * X) + (Y * Y)) / 2 )))
Rayon   = 50


; Boucle
Repeat

ExamineKeyboard()
ClearScreen(0,0,0)


; DrawTunnel ;)
StartDrawing(ScreenOutput())

DrawingMode(4)
For i=0 To 200 Step 2

 Circle(X+i*Cos(angle+Sin(Sqr(i/6))),Y+i*Sin(angle+Cos(Sqr(i/6))),Rayon+i,RGB(X-i,Y,X-i))

;*Sin(angle+Cos(Sqr(i))) <== mémo ;)

Next i

StopDrawing()

angle + 0.02



FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)

Voila j'éspere que ca vous seras utilsl ;)

Publié : lun. 05/déc./2005 21:48
par flaith
Salut et merci !

par contre je dois changer la ligne

Code : Tout sélectionner

DrawingMode(4)
par

Code : Tout sélectionner

DrawingMode(2 | 4)
pour voir les cercles, c'est normal docteur :?:

Publié : lun. 05/déc./2005 21:53
par garzul
Heu chez moi ca marche impecc ;), essai de mettre des couleurs fixe (car ma gestion pour appliquer des couleurs en dégrader est assez barbare ^^ )

Publié : lun. 05/déc./2005 22:13
par flaith
une petite modif de ce type

Code : Tout sélectionner

RGB(200-i,50,200-i)
et ca marche beaucoup mieux, merci :D

Publié : lun. 05/déc./2005 22:19
par Backup
pas mal :D mais change le titre de ton topic Garzul
car ce n'est pas "Dots tunnel" mais juste "tunnel"
en effet "Dots tunnel" veut dire tunnel de points !!
or la ce serai plutot circle tunnel :D

ou attention vous etes devant le tuyau de l'aspirateur :lol:

Publié : lun. 05/déc./2005 22:35
par garzul
;) effectivement ! Mais il est tout à faît possible monsieur Dobro de changez le "circle" par "plot" ou par "box" de taille 1,1 ;) donc le titre est toujour valable \o/

PS : Ta guitare l'est belle mais heu tu joue quoi avec ? :)

Publié : lun. 05/déc./2005 22:57
par Backup
Ta guitare l'est belle mais heu tu joue quoi avec ?
rien , je sais pas jouer :?
je m'en sert pour faire cuire les marrons ! :?

Publié : lun. 05/déc./2005 23:05
par Anonyme
Voici mon propre "Circles" tunnel :D
Jouer avec les constantes pour differents resultat.


; --------------------------------------------------
; - Auteur : Cpl.Bator -
; - Date : 5 Décembre 2005 -
; - Type de programme : Effets tunnel -
; - Version de PB : PureBasic v3.94 -
; --------------------------------------------------
InitSprite () : InitKeyboard () : InitMouse ()
OpenScreen (1024,768,32, "" )



;-Constantes pour les Naneaux ^^
#Max_Anneaux = 300
#Rayon_limite = 1000
#Vitesse_Generation = 40 ; Tps de création entre chaque anneaux
#Vitesse_Acceleration = 0.15





Declare GestionAnneau(X.f,Y.f)

Global Fx.f
Global Fy.f
Global A.f
Structure Anneaux
X.f
Y.f
Rayon.f
Angle.f
Vitesse.f
Flag.b
EndStructure

Dim Anneau.Anneaux( #Max_Anneaux )





Repeat
ExamineKeyboard ()
ClearScreen (0,0,0)
;***********************
A+0.025
 Fx=512 + 384 * Cos (A)
  FY=384 + 128 * Sin (A)
   GestionAnneau(Fx,Fy)
;***********************
FlipBuffers ()
Until KeyboardPushed ( #PB_Key_Escape )






Procedure GestionAnneau(X.f,Y.f)
Shared Zcolor.l
Shared TempsEntreAnneaux.l

For e = 0 To #Max_Anneaux


; Si l'anneau n'existe pas et si on à âs dépasser le temps de creation entres les anneaux
If Anneau(e)\Flag=0 And TempsEntreAnneaux< ElapsedMilliseconds ()
Anneau(e)\Flag=1
TempsEntreAnneaux = ElapsedMilliseconds () + #Vitesse_Generation
Anneau(e)\X = X
Anneau(e)\Y = Y
Anneau(e)\Rayon = 0
Anneau(e)\Angle = 0
Anneau(e)\Vitesse = 0
EndIf


If Anneau(e)\Flag=1

Zcolor = (((Anneau(e)\Rayon*100)/240)*2)+30
If Zcolor>255 : Zcolor=255 : EndIf
If Zcolor<0 : Zcolor=0 : EndIf

Anneau(e)\Rayon + Anneau(e)\Vitesse
Anneau(e)\Vitesse + #Vitesse_Acceleration

StartDrawing ( ScreenOutput ())
DrawingMode (4)
Circle (Anneau(e)\X ,Anneau(e)\Y,Anneau(e)\Rayon, RGB (0,Zcolor,0))
StopDrawing ()
EndIf

If Anneau(e)\Rayon>#Rayon_limite
Anneau(e)\Flag=0
EndIf
Next e

EndProcedure



Publié : lun. 05/déc./2005 23:21
par Backup
ça c'est un tunnel ! :D

yeeeeehaaaa ! :lol:



j'aime beaucoup avec un

" Circle (Anneau(e)\x ,Anneau(e)\y,Anneau(e)\Rayon, RGB (0,Zcolor,(255-Zcolor)))"



ou avec un " DrawingMode (4|2)"

Publié : mar. 06/déc./2005 18:18
par Anonyme
Voilà une p'tite màj.
On peut régler l'épaisseur du cercle. plus le cercle est épais + cela rame.



; --------------------------------------------------
; - Auteur : Cpl.Bator -
; - Date : 6 Décembre 2005 -
; - Type de programme : Effets tunnel -
; - Version de PB : PureBasic v3.94 -
; --------------------------------------------------
InitSprite () : InitKeyboard () : InitMouse ()
OpenScreen (1024,768,32, "" )



;-Constantes pour les Naneaux ^^
#Max_Anneaux = 250
#Rayon_limite = 1024
#Vitesse_Generation = 150 ; Tps de création entre chaque anneaux
#Vitesse_Acceleration = 0.03
#Epaisseur = 3
#Ondulation = 0.008



Declare GestionAnneau(X.f,Y.f)

Global Fx.f
Global Fy.f
Global A.f

Structure Anneaux
X.f
Y.f
Rayon.f
Angle.f
Vitesse.f
Flag.b
EndStructure


Dim Anneau.Anneaux( #Max_Anneaux )




Repeat
ExamineKeyboard ()
ClearScreen (0,0,10)
;***********************
A+ #Ondulation
 Fx=512 + 384 * Cos (A)
  FY=384 + 256 * Sin (A)
   GestionAnneau(Fx,Fy)
;***********************
FlipBuffers ()
Until KeyboardPushed ( #PB_Key_Escape )






Procedure GestionAnneau(X.f,Y.f)
Shared Zcolor.l
Shared TempsEntreAnneaux.l

For e = 0 To #Max_Anneaux


; Si l'anneau n'existe pas et si on à âs dépasser le temps de creation entres les anneaux
If Anneau(e)\Flag=0 And TempsEntreAnneaux< ElapsedMilliseconds ()
Anneau(e)\Flag=1
TempsEntreAnneaux = ElapsedMilliseconds () + #Vitesse_Generation
Anneau(e)\X = X
Anneau(e)\Y = Y
Anneau(e)\Rayon = 20
Anneau(e)\Angle = 0
Anneau(e)\Vitesse = 0
EndIf


If Anneau(e)\Flag=1

Zcolor = (((Anneau(e)\Rayon*100)/240)*2)+30
If Zcolor>255 : Zcolor=255 : EndIf
If Zcolor<0 : Zcolor=0 : EndIf

Anneau(e)\Rayon + Anneau(e)\Vitesse
Anneau(e)\Vitesse + #Vitesse_Acceleration

StartDrawing ( ScreenOutput ())
DrawingMode (4|1)

For EP = 1 To #Epaisseur
  Circle (Anneau(e)\x ,Anneau(e)\y,Anneau(e)\Rayon+EP, RGB (0,0,Zcolor))
   Next EP

StopDrawing ()
EndIf

If Anneau(e)\Rayon>#Rayon_limite
Anneau(e)\Flag=0
EndIf
Next e

EndProcedure



Publié : mar. 06/déc./2005 18:27
par garzul
Jolie tout ca ;)

Publié : mar. 06/déc./2005 18:46
par Frenchy Pilou
Juste à rajouter le mouvement souris pour le point d'application du petit cercle et hop un petit truc hyper dynamique 8)
Histoire de dire que l'utilisateur participe à la création de son hypnose annoncée :lol: