PureBasic

Forums PureBasic
Nous sommes le Mer 26/Juin/2019 5:25

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 
Auteur Message
 Sujet du message: Plasma
MessagePosté: Mer 20/Juin/2018 10:02 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 25/Aoû/2005 22:59
Messages: 445
Localisation: 974
Aller, aujourd'hui je me lâche...
Une version optimisée du plasma que j'avais fait il y a longtemps
Le sinus est précalculé dans une table...


Code:
InitSprite() : InitKeyboard()
#ScrWidth = 800 
#ScrHeight = 600
#BPPx = 4
OpenScreen(#ScrWidth, #ScrHeight,#BPPx * 8,"")

Structure px
  bleu.b
  vert.b
  rouge.b
  alpha.b
EndStructure

Procedure PrintFPS()
  Static sek, FPS, FPS$
  If Val (FormatDate ("%ss", Date ())) = sek
    FPS + 1
  Else
    FPS$ = Str (FPS)
    FPS = 0
  EndIf
  sek=Val (FormatDate ("%ss", Date ()))
  DrawText (0,0, FPS$ + " fps")
EndProcedure
Procedure Plasma ()
 
  ; ------ Definition de la palette --------------
  Dim mapal.px(255)
  For i = 0 To 255
    angle.f = (i * (2 * #PI ) / 255)
    mapal(i)\rouge = Abs (Cos (angle + (2 * #PI) / 3) * 255)
    mapal(i)\vert = Abs (Cos (angle + #PI / 2) * 255)
    mapal(i)\bleu = Abs (Cos (angle) * 255)
   
  Next
  ; ----------------------------------------------
 
  ; ------ Precalc sinus ------
  nbSin = 1024
  Dim sintab.u(nbSin)
  For i = 0 To nbSin - 1
    sintab(i) = Sin (i * (2 * #PI) / 1024) * 32767 + 32767
  Next
  ; ---------------------
 
  ClearScreen(0)
 
  Repeat
    ExamineKeyboard()
   
    If StartDrawing(ScreenOutput())
     
      *BufferVideo.px  = DrawingBuffer()
      TailleBufferX = DrawingBufferPitch()
     
      angle3 + 20
      angle2 + 30
      angle1 + 40
     
      For y = 0 To #ScrHeight - 1
        *b2.px = *BufferVideo + TailleBufferX * y
       
        a2 = ((y + angle2) >> 8) + sintab ((angle2 + y ) % nbSin) >> 8
        col2 = sintab (a2 % nbSin)
       
        tmp = sintab ((angle3 + y) % nbSin) >> 8
       
        For x = 0 To #ScrWidth - 1
          *b2 + #BPPx
         
          a1  = ((x + angle1) >> 8) + sintab ((angle1 + x) % nbSin) >> 8
          col1 = sintab (a1 % nbSin)
         
          a3 = (((x + y) << 5 + angle3) >> 5) + tmp
          col3 = sintab (a3 % nbSin)
         
          col = (col1 + col2 + col3) >> 10
         
          ;*b2\alpha = 255
          *b2\rouge = mapal(col)\rouge
          *b2\vert = mapal(col)\vert
          *b2\bleu = mapal(col)\bleu
         
        Next
      Next
     
      PrintFPS()
      StopDrawing()
    EndIf
   
    FlipBuffers()
  Until KeyboardPushed(#PB_Key_Escape)
 
 
EndProcedure


Plasma ()

_________________
Quelques manoucheries : I can't give you anything but love / Stompin' at decca


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Plasma
MessagePosté: Mer 20/Juin/2018 12:19 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 880
Super. Merci du partage


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Plasma
MessagePosté: Mer 20/Juin/2018 15:23 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6623
Localisation: Isere
Waoooouuuh !!! :D
Image
Merci du partage 8)

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Plasma
MessagePosté: Mer 20/Juin/2018 15:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8675
Salut Bombseb,
content de te revoir :)

Joli plasma, l'ajout d'un DisableDebugger en début de code est tout de même vivement conseillé sinon ça rame (testé en 5.62x64) même avec ma config portée par un i5 et une 1080;)

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye