Page 2 sur 2

Re: Feu de cheminée

Publié : mar. 12/janv./2016 23:57
par Flype
Un feu très vif - blanc au niveau du foyer, çà le fait bien je trouve :

Image

Code : Tout sélectionner

;====================================
; Fire Effect, flype
;====================================

EnableExplicit

#W = 200
#H = 150
#Z = 2

Global pow = 30
Global Dim pix.l(#W+2, #H+2)

;====================================

Procedure Clamp(x, min, max)
  If x > max
    ProcedureReturn max
  EndIf
  If x < min
    ProcedureReturn min
  EndIf
  ProcedureReturn x
EndProcedure

Procedure FireEffect_Calc()
  Protected x, y
  For y = 0 To #H + 1
    For x = 1 To #W - 1
      pix(x, y) = (pix(x-1, y) + pix(x+1, y) + pix(x, y+1) + pix(x, y+1)) >> 2
    Next
  Next
EndProcedure

Procedure FireEffect_Clear(color)
  Protected x, y
  For y = 0 To #H + 2
    For x = 0 To #W + 2
      pix(x, y) = color
    Next
  Next
EndProcedure

Procedure FireEffect_Draw()
  Protected x, y
  If StartDrawing(CanvasOutput(0))
    For y = 0 To #H - 1
      For x = 0 To #W - 1
        If pix(x, y) < 210
          Box(x*#Z, y*#Z, #Z, #Z, RGB(255, pix(x, y), 0))
        Else
          Box(x*#Z, y*#Z, #Z, #Z, RGB(255, 255, pix(x, y)))
        EndIf
      Next
    Next
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(10, 10, Str(pow), $00ffff)
    StopDrawing()
  EndIf
EndProcedure

Procedure FireEffect_Feed()
  Protected i
  For i = 0 To 20
   pix(Random(#W, 0), #H+2) = Clamp(Random(pow, 0) * 2, 0, 255)
  Next
EndProcedure

Procedure FireEffect_FeedMouse(color)
  Protected x, y
  Protected md = Random(10, 0)
  Protected mx = ( WindowMouseX(0) + 1 ) / #Z
  Protected my = ( WindowMouseY(0) + 1 ) / #Z
  For y = -md To md
    For x = -md To md
      pix(Clamp(mx + x, 0, #W), #H+2) = color
      ;pix(Clamp(mx + x, 0, #W), my) = color
    Next
  Next
EndProcedure

Procedure FireEffect_SetPow()
  pow + ( 5 * GetGadgetAttribute(0, #PB_Canvas_WheelDelta) )
  pow = Clamp(pow, 0, 255)
EndProcedure

Procedure FireEffect_Update()
  FireEffect_Calc()
  FireEffect_Feed()
  FireEffect_Draw()
  FireEffect_FeedMouse(Random(255, 220))
EndProcedure

;====================================

If OpenWindow(0, 0, 0, #W*#Z, #H*#Z, "Fire Effect", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  CanvasGadget(0, 0, 0, #W*#Z, #H*#Z)
  FireEffect_Clear(0)
  Repeat
    Select WaitWindowEvent(1)
      Case #PB_Event_Gadget
        Select EventType()
          Case #PB_EventType_MouseWheel: FireEffect_SetPow()
          Case #PB_EventType_LeftClick:  FireEffect_Clear(255)
          Case #PB_EventType_RightClick: FireEffect_Clear(0)
        EndSelect
      Case #PB_Event_CloseWindow
        Break
    EndSelect
    FireEffect_Update()
  ForEver
EndIf

;====================================

Re: Feu de cheminée

Publié : mer. 13/janv./2016 15:24
par Kwai chang caine
Ca me fait toujours un immense plaisir de te relire "FLIPOUNET", ça me rappelle ma jeunesse en temps que jeune KWAï :mrgreen:

Super beau tes effets de feu, d'ailleurs le feu, je l'ai à la ligne 67 quand je sort ou je rentre avec le mulot

Code : Tout sélectionner

      pix(mx + x, my + y) = color
sur ce code
http://www.purebasic.fr/french/viewtopi ... 21#p179821

Re: Feu de cheminée

Publié : mer. 13/janv./2016 15:28
par Flype
Salut padawan :D

Oui j'ai retiré le code d'ailleurs à l'instant.
Mieux vaut regardé le code des post suivants.

Re: Feu de cheminée

Publié : jeu. 14/janv./2016 9:22
par Kwai chang caine
Merci MAITRE, d'avoir satisfait l' humble requête de ton dévoué et modeste subalterne admirateur 8)
C'est si bon de te voir visiter de temps à autres la planète PB et ses PuBien...heu non ...Ça c'est les poils, faudra que je nous trouve un autre nom :mrgreen:
Quoi que pour moi ça colle, car depuis que tu es parti et malgré tes nombreux apprentissages envers ton serviteur. ..je code toujours comme une bi.. :D

Re: Feu de cheminée

Publié : jeu. 14/janv./2016 9:31
par djes
Il y avait ce code dans le bouquin "PC interdit", et pour alimenter le débat sur les couleurs, il y avait une petite pointe de bleu ;)

Sur PC en mode X c'était tellement facile ce genre d'effets comparé à l'Amiga qui n'aimait pas trop le traitement "au pixel" (mais qui écrasait le PC avec ses modes planar jusqu'à 1504x576 overscan...)...

Re: Feu de cheminée

Publié : mar. 19/janv./2016 15:17
par Flype
Ah djes, merci pour le tuyau.
J'ai fait quelques petites recherches et en effet, la petite pointe de bleue est du plus bel effet.
Il faut pour cela définir une palette bien plus subtile que ce que j'avais fait.

Résultat :

Image

Code : Tout sélectionner

EnableExplicit

#W = 200
#H = 150
#Z = 2

Define x, y, i
Dim cmap.l(256)
Dim pix.l(#W+2, #H+2)

For i = 0 To 31
  cmap(i +   0) = RGB(     0,      0,         i << 1)
  cmap(i +  32) = RGB(i << 3,      0,  64 - (i << 1))
  cmap(i +  64) = RGB(   255, i << 3,              0)
  cmap(i +  96) = RGB(   255,    255,         i << 2)
  cmap(i + 128) = RGB(   255,    255,  64 + (i << 2))
  cmap(i + 160) = RGB(   255,    255, 128 + (i << 2))
  cmap(i + 192) = RGB(   255,    255,        192 + i)
  cmap(i + 224) = RGB(   255,    255,        224 + i)
Next

If OpenWindow(0, 0, 0, #W*#Z, #H*#Z, "Fire Effect", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  CanvasGadget(0, 0, 0, #W*#Z, #H*#Z)
  Repeat
    pix(Random(#W, 0), #H+2) = Random(255, 0)
    pix(Random(#W, 0), #H+2) = Random(255, 0)
    pix(Random(#W, 0), #H+2) = Random(255, 0)
    For y = 0 To #H + 1
      For x = 1 To #W - 1
        pix(x, y) = (pix(x-1, y) + pix(x+1, y) + pix(x, y+1) + pix(x, y+1)) >> 2
      Next
    Next
    StartDrawing(CanvasOutput(0))
    For y = 0 To #H - 1
      For x = 0 To #W - 1
        Box(x*#Z, y*#Z, #Z, #Z, cmap(pix(x, y)))
      Next
    Next
    StopDrawing()
  Until WaitWindowEvent(1) = #PB_Event_CloseWindow
EndIf

Re: Feu de cheminée

Publié : mar. 19/janv./2016 15:33
par GallyHC
Bonjour,

Bien sympa encore comme effet, j'ai mis a jour sur PBFrance, avec le dernier code.

Cordialement,
GallyHC

Re: Feu de cheminée

Publié : mar. 19/janv./2016 15:44
par Micoute
Ton feu de cheminée, on dirait plutôt un brasier !

Re: Feu de cheminée

Publié : mar. 19/janv./2016 15:52
par Shadow
C'est pas mal mais ont peut amélioré encore.
C'est pas très réaliste je trouve :wink:

Faudrait enlever l'arrière plant rouge orange après les flammes.
Sinon c'est sympathique je trouve :)

Merci du partage.

Re: Feu de cheminée

Publié : mar. 19/janv./2016 15:59
par falsam
J'aime beaucoup. Merci Flype.

Re: Feu de cheminée

Publié : mar. 19/janv./2016 17:57
par Ar-S
Très beau le dernier rendu Flype.

Re: Feu de cheminée

Publié : lun. 15/févr./2016 1:18
par Flype
Petit délire retro-computing ?

Je me suis amusé à réécrire ce code sur Amiga :twisted:

Plus précisément sur Amiga 600 équippé d'une carte accélératrice Vampire http://www.kipper2k.com/accel600.html
Pas en ECS ou AGA pour les connaisseurs mais en RTG (Picasso96).

1er essai :

Conversion du code en langage C / AmigaOS.
Résultat bien sympathique en full screen 640x480x8bits.

https://www.youtube.com/watch?v=44xO2e0YhoA

2ème essai :

Conversion des parties sensibles en assembleur M68K.
Je vous laisse voir le compteur FPS à la fin de la vidéo.
La Vampire et son nouveau CPU 68K est impressionnante.

https://www.youtube.com/watch?v=qJFKT97FPKo

Re: Feu de cheminée

Publié : lun. 15/févr./2016 1:22
par Ar-S
Et ben on peut dire que c'est méchamment fluide :)

Re: Feu de cheminée

Publié : lun. 15/févr./2016 10:00
par Flype
La résolution classique sur Amiga était 320x256. 640x480 c'est beaucoup demandé à un amiga.
Et même sur PC, c'est très gourmand cet algorithme.

Re: Feu de cheminée

Publié : lun. 22/févr./2016 9:33
par djes
Flype a écrit :Petit délire retro-computing ?

Je me suis amusé à réécrire ce code sur Amiga :twisted:

Plus précisément sur Amiga 600 équippé d'une carte accélératrice Vampire http://www.kipper2k.com/accel600.html
Pas en ECS ou AGA pour les connaisseurs mais en RTG (Picasso96).

1er essai :

Conversion du code en langage C / AmigaOS.
Résultat bien sympathique en full screen 640x480x8bits.

https://www.youtube.com/watch?v=44xO2e0YhoA

2ème essai :

Conversion des parties sensibles en assembleur M68K.
Je vous laisse voir le compteur FPS à la fin de la vidéo.
La Vampire et son nouveau CPU 68K est impressionnante.

https://www.youtube.com/watch?v=qJFKT97FPKo
Je rêve ou l'amiga reprend du poil de la bête ? Je vois plein de nouveaux codes et de démos en ce moment ! Merci pour les vidéos, ça fait du bien de revoir un joli workbench et devpac :)