PureBasic
https://www.purebasic.fr/french/

Petit effet de cercle style intro/demo
https://www.purebasic.fr/french/viewtopic.php?f=6&t=17248
Page 1 sur 1

Auteur:  GallyHC [ Dim 29/Avr/2018 11:30 ]
Sujet du message:  Petit effet de cercle style intro/demo

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:
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

Auteur:  Micoute [ Dim 29/Avr/2018 15:19 ]
Sujet du message:  Re: Petit effet de cercle style intro/demo

Jolis effets, j'adore, merci pour le partage.

Auteur:  Kwai chang caine [ Dim 29/Avr/2018 15:32 ]
Sujet du message:  Re: Petit effet de cercle style intro/demo

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)

Auteur:  Shadow [ Dim 29/Avr/2018 17:26 ]
Sujet du message:  Re: Petit effet de cercle style intro/demo

Très sympa GallyHC :)
Peut être moyen de choisir la vitesse de tourniqué ?

Auteur:  nico [ Dim 29/Avr/2018 17:39 ]
Sujet du message:  Re: Petit effet de cercle style intro/demo

J'aime bien aussi, bonne démo.

Auteur:  GallyHC [ Lun 30/Avr/2018 8:37 ]
Sujet du message:  Re: Petit effet de cercle style intro/demo

Merci pour les commentaires.

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

Code:
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

Auteur:  Ar-S [ Lun 30/Avr/2018 9:16 ]
Sujet du message:  Re: Petit effet de cercle style intro/demo

Fluide et jolie.
Merci pour le partage.

Auteur:  falsam [ Lun 30/Avr/2018 11:23 ]
Sujet du message:  Re: Petit effet de cercle style intro/demo

Bien cet effet Gally. Par contre tu devrais le faire avec une fenêtre plein écran. Bravo.

Auteur:  Shadow [ Lun 30/Avr/2018 17:18 ]
Sujet du message:  Re: Petit effet de cercle style intro/demo

Merci Gally !

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/