Page 1 sur 1

Petit effet de cercle style intro/demo

Publié : dim. 29/avr./2018 11:30
par GallyHC
Bonjour,

Comme c'est un peu la mode des intro/demo, je me suis décider de faire un petit effet de cercle et cela donne :

Image

Code : Tout sélectionner

EnableExplicit

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

#_OBJET3D_DEF_SINCOS = 359

Global Dim _Sin.f(#_OBJET3D_DEF_SINCOS)
Global Dim _Cos.f(#_OBJET3D_DEF_SINCOS)

Define.i i
For i=0 To #_OBJET3D_DEF_SINCOS
  _Sin(i) = Sin((i / 180) * #PI)
  _Cos(i) = Cos((i / 180) * #PI)
Next i

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

Procedure _CIRCLE_ANTIALISING(x.i, y.i, radius.d, antilenh.d, color.i)
  ;
  ;
  ;
  Define.c cR, cG, cB
  Define.d dNormal, dValue

  If radius <= 0
    radius = 0.00001
  EndIf
  If antilenh <= 0
    antilenh = 0.00001
  EndIf

  ResetGradientColors()
  DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Gradient)

  cR      = Red  (color)
  cG      = Green(color)
  cB      = Blue (color)
  dNormal = 1 / radius
  dValue  = 1 - antilenh * dNormal

  GradientColor(   0  , RGBA(cR, cG, cB, 255))
  GradientColor(dValue, RGBA(cR, cG, cB, 255))
  GradientColor(   1  , RGBA(cR, cG, cB, 0  ))

  CircularGradient(x, y, radius)
  Circle          (x, y, radius)
  
EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

Define.i j, event, px, py
;
Define.i hWnd = OpenWindow(0, 0, 0, 800, 600, "Intro", #PB_Window_SystemMenu)
If hWnd <> 0
  CanvasGadget(1, 0, 0, 800, 600)
  ;
  i     = 0
  px    = 400
  py    = 200
  ;
  Repeat
    event   = WindowEvent()
    ;
    If StartDrawing(CanvasOutput(1))
      DrawingMode(#PB_2DDrawing_AlphaBlend)
      Box(0, 0, 800, 600, RGBA(0, 0, 0, 10))
      ;
      i = (i + 1) % 359
      j = (j + 2) % 359
      ;
      _CIRCLE_ANTIALISING(px + _cos(i) * 120 + _sin(j) * 160, (py + 100) + _Cos(j) * 100 - _Sin(i) * 120, 60 + _Sin(i) * _sin(j) * 60, 120, RGBA(200, 0, 0, 40 ) )
      _CIRCLE_ANTIALISING(px + _cos(i) * 180 - _cos(j) * 160, (py + 100) - _sin(j) * 120 + _Sin(i) * 120, 60 - _Sin(i) * _sin(j) * 60, 120, RGBA(0, 200, 0, 40 ) )
      _CIRCLE_ANTIALISING(px - _cos(i) * 120 + _sin(j) * 160, (py + 100) + _Cos(j) * 140 + _Sin(i) * 120, 60 + _cos(i) * _sin(j) * 60, 120, RGBA(0, 0, 200, 40 ) )
      _CIRCLE_ANTIALISING(px - _cos(i) * 120 - _sin(j) * 160, (py + 100) - _Cos(j) * 140 + _Sin(i) * 120, 60 - _cos(i) * _sin(j) * 60, 120, RGBA(200, 0, 200, 40))
      _CIRCLE_ANTIALISING(px + _cos(i) * 180 + _sin(j) * 160, (py + 100) + _Cos(j) * 120 + _Sin(i) * 120, 60 + _cos(i) * _sin(j) * 60, 120, RGBA(200, 200, 0, 40))
      _CIRCLE_ANTIALISING(px + _cos(i) * 120 - _sin(j) * 160, (py + 100) - _Cos(j) * 120 + _Sin(i) * 120, 60 - _cos(i) * _sin(j) * 60, 120, RGBA(0, 200, 200, 40))
      ;           
      StopDrawing()
    EndIf
    ;
  Until event = #PB_Event_CloseWindow
  ;  
EndIf
Cordialement,
GallyHC

Re: Petit effet de cercle style intro/demo

Publié : dim. 29/avr./2018 15:19
par Micoute
Jolis effets, j'adore, merci pour le partage.

Re: Petit effet de cercle style intro/demo

Publié : dim. 29/avr./2018 15:32
par Kwai chang caine
Oui... super joli effet et en peu de lignes 8O
C'est OPTIC 2000 qui t'as inspiré ?
Car quant on le regarde un peu longtemps, on a l'impression d'avoir besoin de nouvelles lunettes avec l'effet flou :lol:
Merci du partage 8)

Re: Petit effet de cercle style intro/demo

Publié : dim. 29/avr./2018 17:26
par Shadow
Très sympa GallyHC :)
Peut être moyen de choisir la vitesse de tourniqué ?

Re: Petit effet de cercle style intro/demo

Publié : dim. 29/avr./2018 17:39
par nico
J'aime bien aussi, bonne démo.

Re: Petit effet de cercle style intro/demo

Publié : lun. 30/avr./2018 8:37
par GallyHC
Merci pour les commentaires.

@"shadow" > une version ou l'on peu modifier la vitesse (en modifiant les valeurs de "i" et "j") :

Code : Tout sélectionner

EnableExplicit

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

Procedure _CIRCLE_ANTIALISING(x.i, y.i, radius.d, antilenh.d, color.i)
  ;
  ;
  ;
  Define.c cR, cG, cB
  Define.d dNormal, dValue

  If radius <= 0
    radius = 0.00001
  EndIf
  If antilenh <= 0
    antilenh = 0.00001
  EndIf

  ResetGradientColors()
  DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Gradient)

  cR      = Red  (color)
  cG      = Green(color)
  cB      = Blue (color)
  dNormal = 1 / radius
  dValue  = 1 - antilenh * dNormal

  GradientColor(   0  , RGBA(cR, cG, cB, 255))
  GradientColor(dValue, RGBA(cR, cG, cB, 255))
  GradientColor(   1  , RGBA(cR, cG, cB, 0  ))

  CircularGradient(x, y, radius)
  Circle          (x, y, radius)
  
EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

Define.f i, j
Define.i event, px, py
;
Define.i hWnd = OpenWindow(0, 0, 0, 800, 600, "Intro", #PB_Window_SystemMenu)
If hWnd <> 0
  CanvasGadget(1, 0, 0, 800, 600)
  ;
  i     = 0
  px    = 400
  py    = 200
  ;
  Repeat
    event   = WindowEvent()
    ;
    If StartDrawing(CanvasOutput(1))
      DrawingMode(#PB_2DDrawing_AlphaBlend)
      Box(0, 0, 800, 600, RGBA(0, 0, 0, 10))
      ;
      i + 0.008
      j + 0.004
      ;
      _CIRCLE_ANTIALISING(px + Cos(i) * 120 + Sin(j) * 160, (py + 100) + Cos(j) * 100 - Sin(i) * 120, 60 + Sin(i) * Sin(j) * 60, 120, RGBA(200, 0, 0, 40 ) )
      _CIRCLE_ANTIALISING(px + Cos(i) * 180 - Cos(j) * 160, (py + 100) - Sin(j) * 120 + Sin(i) * 120, 60 - Sin(i) * Sin(j) * 60, 120, RGBA(0, 200, 0, 40 ) )
      _CIRCLE_ANTIALISING(px - Cos(i) * 120 + Sin(j) * 160, (py + 100) + Cos(j) * 140 + Sin(i) * 120, 60 + Cos(i) * Sin(j) * 60, 120, RGBA(0, 0, 200, 40 ) )
      _CIRCLE_ANTIALISING(px - Cos(i) * 120 - Sin(j) * 160, (py + 100) - Cos(j) * 140 + Sin(i) * 120, 60 - Cos(i) * Sin(j) * 60, 120, RGBA(200, 0, 200, 40))
      _CIRCLE_ANTIALISING(px + Cos(i) * 180 + Sin(j) * 160, (py + 100) + Cos(j) * 120 + Sin(i) * 120, 60 + Cos(i) * Sin(j) * 60, 120, RGBA(200, 200, 0, 40))
      _CIRCLE_ANTIALISING(px + Cos(i) * 120 - Sin(j) * 160, (py + 100) - Cos(j) * 120 + Sin(i) * 120, 60 - Cos(i) * Sin(j) * 60, 120, RGBA(0, 200, 200, 40))
      ;           
      StopDrawing()
    EndIf
    ;
  Until event = #PB_Event_CloseWindow
  ;  
EndIf
Cordialement,
GallyHC

Re: Petit effet de cercle style intro/demo

Publié : lun. 30/avr./2018 9:16
par Ar-S
Fluide et jolie.
Merci pour le partage.

Re: Petit effet de cercle style intro/demo

Publié : lun. 30/avr./2018 11:23
par falsam
Bien cet effet Gally. Par contre tu devrais le faire avec une fenêtre plein écran. Bravo.

Re: Petit effet de cercle style intro/demo

Publié : lun. 30/avr./2018 17:18
par Shadow
Merci Gally !