Feu de cheminée

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Re: Feu de cheminée

Message 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

;====================================
Image
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Feu de cheminée

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

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Re: Feu de cheminée

Message par Flype »

Salut padawan :D

Oui j'ai retiré le code d'ailleurs à l'instant.
Mieux vaut regardé le code des post suivants.
Image
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Feu de cheminée

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

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Feu de cheminée

Message 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...)...
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Re: Feu de cheminée

Message 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
Image
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Feu de cheminée

Message par GallyHC »

Bonjour,

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

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
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Feu de cheminée

Message par Micoute »

Ton feu de cheminée, on dirait plutôt un brasier !
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Feu de cheminée

Message 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.
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.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Feu de cheminée

Message par falsam »

J'aime beaucoup. Merci Flype.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Feu de cheminée

Message par Ar-S »

Très beau le dernier rendu Flype.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Re: Feu de cheminée

Message 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
Image
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Feu de cheminée

Message par Ar-S »

Et ben on peut dire que c'est méchamment fluide :)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Re: Feu de cheminée

Message 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.
Image
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Feu de cheminée

Message 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 :)
Répondre