Petit effet de cercle style intro/demo

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
GallyHC
Messages : 1689
Inscription : lun. 17/déc./2007 12:44

Petit effet de cercle style intro/demo

Message 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
Dernière modification par GallyHC le dim. 29/avr./2018 17:31, modifié 1 fois.
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Micoute
Messages : 2403
Inscription : dim. 02/oct./2011 16:17
Localisation : 50200 Coutances

Re: Petit effet de cercle style intro/demo

Message par Micoute »

Jolis effets, j'adore, merci pour le partage.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Kwai chang caine
Messages : 6824
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Petit effet de cercle style intro/demo

Message 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)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Shadow
Messages : 1206
Inscription : mer. 04/nov./2015 17:39

Re: Petit effet de cercle style intro/demo

Message par Shadow »

Très sympa GallyHC :)
Peut être moyen de choisir la vitesse de tourniqué ?
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Petit effet de cercle style intro/demo

Message par nico »

J'aime bien aussi, bonne démo.
Avatar de l’utilisateur
GallyHC
Messages : 1689
Inscription : lun. 17/déc./2007 12:44

Re: Petit effet de cercle style intro/demo

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Ar-S
Messages : 9145
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Petit effet de cercle style intro/demo

Message par Ar-S »

Fluide et jolie.
Merci pour le partage.
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.6x / 5.7x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
Avatar de l’utilisateur
falsam
Messages : 6950
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Petit effet de cercle style intro/demo

Message par falsam »

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

➽ Config PureBasic : Windows 10 Version 64 Bits - DirectX 11 - PB 5.72

➽ Je ne réponds pas aux MP techniques
Shadow
Messages : 1206
Inscription : mer. 04/nov./2015 17:39

Re: Petit effet de cercle style intro/demo

Message par Shadow »

Merci Gally !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Répondre