Demande de tuto "Particle"

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Demande de tuto "Particle"

Message par Ar-S »

Si quelqu'un maitrise les particles, j'aimerai un tuto simple.

L'exemple de la doc est magnifique mais je le trouve trop complexe.
J'ai essayé de faire un test, ça rend vraiment n'imp.

Code : Tout sélectionner


Enumeration
  #Emeteur
  
EndEnumeration

IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"

UsePNGImageDecoder()

#CameraSpeed = 1
#MaxSpeedFactor = 10
#MinSpeedFactor = 0

InitEngine3D()

InitSprite()
InitKeyboard()
InitMouse()


If Screen3DRequester()
  
  CreateParticleEmitter(#Emeteur, 400, 400, 400, #PB_Particle_Point, 2, 2, 2)
  
  ; Creation d'une texture (10x10 pixel blanc)
;   TX = CreateTexture(#PB_Any, 10, 10)
;   StartDrawing(TextureOutput(TX))
;   Box(0,0,10,10,$FFFFFF)
;   StopDrawing()
  
  IM = LoadImage(#PB_Any, #PB_Compiler_Home + "\Examples\3D\Data\Textures\Caisse.png")
  TX = CreateTexture(#PB_Any,64,64)
  StartDrawing(TextureOutput(TX))
    DrawImage(ImageID(IM),0,0)
  StopDrawing()
  
  ; Création du material d'après la texture 
  CreateMaterial(0, TextureID(TX))
  
  ; Création de l'émeteur de particules
  CreateParticleEmitter(#Emeteur, 200, 200, 1, #PB_Particle_Box,64,64,0)
  ParticleMaterial    (#Emeteur, MaterialID(0))
  ParticleTimeToLive  (#Emeteur, 5, 10)
  ParticleEmissionRate(#Emeteur, 25)
  ParticleSize        (#Emeteur, 8, 8)
  ParticleColorRange  (#Emeteur, RGB(255,0,0), RGB(0, 255, 0))
  
  
  MoveParticleEmitter(#Emeteur, 0, 0, 0 )
  
  CreateCamera(0, 0, 0, 100, 100)
  MoveCamera(0, 0, 0, 100, #PB_Absolute)
  
  Repeat
    Screen3DEvents()
    
    If ExamineMouse()
      MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
      MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
    EndIf  
    
    If ExamineKeyboard()
      
      If KeyboardReleased(#PB_Key_F5)
        Disable = 1 - Disable
        DisableParticleEmitter(#Emeteur, Disable)
      EndIf
      
      If KeyboardPushed(#PB_Key_F6) 
        speedFactor = speedFactor + percent * (#MaxSpeedFactor - speedFactor)
        ParticleSpeedFactor(#Emeteur, speedFactor)
      EndIf
      
      If KeyboardPushed(#PB_Key_F7) 
        speedFactor = speedFactor + percent * (#MinSpeedFactor - speedFactor)
        ParticleSpeedFactor(#Emeteur, speedFactor)
      EndIf
      
      If KeyboardPushed(#PB_Key_Left)
        KeyX = -#CameraSpeed 
        
      ElseIf KeyboardPushed(#PB_Key_Right)
        KeyX = #CameraSpeed 
        
      Else
        KeyX = 0
      EndIf
      
      If KeyboardPushed(#PB_Key_Up)
        KeyY = -#CameraSpeed 
      ElseIf KeyboardPushed(#PB_Key_Down)
        KeyY = #CameraSpeed 
      Else
        KeyY = 0
      EndIf
      
    EndIf
    
    RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
    MoveCamera  (0, KeyX, 0, KeyY)
    
    RenderWorld()
    Screen3DStats()
    
    FlipBuffers()
  Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf

~~~~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
SPH
Messages : 4726
Inscription : mer. 09/nov./2005 9:53

Re: Demande de tuto "Particle"

Message par SPH »

ca me dit :
Le compilateur n'est pas encore pret... Veuillez reessayer
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Demande de tuto "Particle"

Message par Ar-S »

bah... j'y peux rien..
~~~~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
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Demande de tuto "Particle"

Message par falsam »

je te propose un système de particule basic dans une boite ayant la même dimension que le screen.

Code : Tout sélectionner

    ;Création du générateur de particules.
    ; - Tout comme la caméra, il sera placé au point central de la scene (0, 0, 0)
    ; - La taille du générateur est celui de la scene
    Emiter = CreateParticleEmitter(#PB_Any, ScreenWidth(), ScreenHeight(), 1, #PB_Particle_Box, 0, 0, 0)
    
    ;Nombre de particules émises par seconde par l'émetteur
    ParticleEmissionRate(Emiter, 2000)
    
    ;Durée de vie d'une particule (Minimum et Maximum)
    ParticleTimeToLive(Emiter, 1, 10)
    
    ;Taille des particules
    ParticleSize(Emiter, 2, 2)
    
    ;On donne une couleur aléatoire à chaque texture 
    ParticleColorRange(Emiter, RGB(255, 0, 0), RGB(255, 255, 255))    
    
    ;Creation du material (la texture) qui sera utilisé par le générateur 
    ;La texture se trouve dans le dossier d'installation de PureBasic ("Examples/3d/Data/Textures")
    Material = CreateMaterial(#PB_Any, TextureID(LoadTexture(-1, "flare.png")))
    
    ;La texture n'ayant pas de transparence, suppression du fond noir de la texture
    MaterialBlendingMode(Material, #PB_Material_Add)    
    
    ;L'éclairage dynamique est désactivé (Sans cette option c'est la couleur de la texture qui est visible)
    DisableMaterialLighting(Material, #True)
          
    ;On affecte le materiel au générateur de particules
    ParticleMaterial(Emiter, MaterialID(material))
Et la mise en oeuvre avec ce code

Code : Tout sélectionner

EnableExplicit

Global Camera, Light, Emiter, Material, Bottom

;Summary
Declare GameLoad()
Declare RenderGame3D()
Declare RenderGame2D() 
Declare Exit()

GameLoad()

Procedure GameLoad()
  Protected Window 
  
  If InitEngine3D() And  InitKeyboard() And InitSprite() And InitMouse() And InitSound()
    Window = OpenWindow(#PB_Any, 0, 0, 0, 0, "", #PB_Window_Maximize | #PB_Window_BorderLess)
    
    ;-[Screen]
    OpenWindowedScreen(WindowID(Window),0, 0, WindowWidth(Window) , WindowHeight(Window))    
    KeyboardMode(#PB_Keyboard_International)  
    
    ;-[2D] - Création ou Chargement des élements 2D si besoin
    Bottom = CreateSprite(-1, ScreenWidth(), 150, #PB_Sprite_AlphaBlending)
    
    
    ;-[3D] - Création ou chagement des élements 3D si besoin
    Add3DArchive(#PB_Compiler_Home + "Examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
    
    ;-Camera
    
    Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
    CameraBackColor(Camera, RGB(0, 0, 0))
    MoveCamera(Camera, 0, 0, 0)
    CameraLookAt(Camera, 0, 0, 0)
    
    ;-Light
    Light = CreateLight(#PB_Any, RGB(255, 255, 255), 0, 0, 0, #PB_Light_Point)
    
    ;-Particules 
    
    ;Création du générateur de particules.
    ; - Tout comme la caméra, il sera placé au point central de la scene (0, 0, 0)
    ; - La taille du générateur est celui de la scene
    Emiter = CreateParticleEmitter(#PB_Any, ScreenWidth(), ScreenHeight(), 1, #PB_Particle_Box, 0, 0, 0)
    
    ;Nombre de particules émises par seconde par l'émetteur
    ParticleEmissionRate(Emiter, 2000)
    
    ;Durée de vie d'une particule (Minimum et Maximum)
    ParticleTimeToLive(Emiter, 1, 10)
    
    ;Taille des particules
    ParticleSize(Emiter, 2, 2)
    
    ;On donne une couleur aléatoire à chaque texture 
    ParticleColorRange(Emiter, RGB(255, 0, 0), RGB(255, 255, 255))    
    
    ;Creation du material (la texture) qui sera utilisé par le générateur 
    ;La texture se trouve dans le dossier d'installation de PureBasic ("Examples/3d/Data/Textures")
    Material = CreateMaterial(#PB_Any, TextureID(LoadTexture(-1, "flare.png")))
    
    ;La texture n'ayant pas de transparence, suppression du fond noir de la texture
    MaterialBlendingMode(Material, #PB_Material_Add)    
    
    ;L'éclairage dynamique est désactivé (Sans cette option c'est la couleur de la texture qui est visible)
    DisableMaterialLighting(Material, #True)
          
    ;On affecte le materiel au générateur de particules
    ParticleMaterial(Emiter, MaterialID(material))
            
    ;-Loop
    While #True
      Repeat : Until WindowEvent() = 0
      FlipBuffers()  
      RenderGame3D()
      RenderWorld()
      RenderGame2D()
    Wend
  Else
    MessageRequester("Ooops", "Impossible de charger l'environnement 3D")
  EndIf 
EndProcedure

Procedure RenderGame3D()    
  If ExamineKeyboard()
    If KeyboardReleased(#PB_Key_Escape)
      Exit()
    EndIf  
  EndIf
  
  If KeyboardPushed(#PB_Key_Left)
    RotateCamera(Camera, 0, 1, 0, #PB_Relative)
  EndIf  
  
  If KeyboardPushed(#PB_Key_Right)
    RotateCamera(Camera, 0, -1, 0, #PB_Relative)
  EndIf  
  
  If KeyboardPushed(#PB_Key_PageUp)
    MoveCamera(Camera, 0, 0.1, 0, #PB_Relative)
  EndIf  
  
  If KeyboardPushed(#PB_Key_PageDown)
    MoveCamera(Camera, 0, -0.1, 0, #PB_Relative)
  EndIf  
  
  If ExamineMouse()
    
  EndIf 
EndProcedure

Procedure RenderGame2D()
  StartDrawing(SpriteOutput(Bottom))
  DrawingMode(#PB_2DDrawing_AlphaChannel)
  Box(0, 0, ScreenWidth(), SpriteWidth(Bottom), RGBA(0, 0, 0, 110))
  DrawingMode(#PB_2DDrawing_Transparent)
  DrawText(30, 10, ". : : Help : : .")
  DrawText(30, 40, "<--- ou ---> Rotation gauche ou droite de la caméra.")
  DrawText(30, 70, "Page-Up or Page-Down Déplacement vertical de la caméra.")
  DrawText(30, 100, "Esc quitter.")
  
  StopDrawing()
  DisplayTransparentSprite(Bottom, 0, ScreenHeight() - SpriteHeight(Bottom))
EndProcedure

Procedure Exit()
  End
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.03 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 : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Demande de tuto "Particle"

Message par Ar-S »

Merci Falsam.
Je vais étudier ça de plus prés.
J'adore les particles. J'utilisais à l'époque pour des vidéos le soft Particle Illusion. Il était d'une puissance affolante.
J'avoue que de pouvoir en faire en PB m'intéresse (le effets sont quasi illimités) mais l'approche est pas si simple, sans compter les scripts que je n'ai même pas encore commencé à étudier.
~~~~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
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Demande de tuto "Particle"

Message par falsam »

Un autre exemple dans lequel on met en oeuvre deux rayons lasers bleu et rouge

Code : Tout sélectionner

EnableExplicit

Global Camera, Light, EmiterRed, EmiterBlue, Mesh, Material, Entity, Laser, Bottom

;Summary
Declare GameLoad()
Declare RenderGame3D()
Declare RenderGame2D() 
Declare Exit()

GameLoad()

Procedure GameLoad()
  Protected Window 
  
  If InitEngine3D() And  InitKeyboard() And InitSprite() And InitMouse() And InitSound()
    Window = OpenWindow(#PB_Any, 0, 0, 0, 0, "", #PB_Window_Maximize | #PB_Window_BorderLess)
    
    ;-[Screen]
    OpenWindowedScreen(WindowID(Window),0, 0, WindowWidth(Window) , WindowHeight(Window))    
    KeyboardMode(#PB_Keyboard_International)  
    
    ;-[2D] - Création ou Chargement des élements 2D si besoin
    Bottom = CreateSprite(-1, ScreenWidth(), 150, #PB_Sprite_AlphaBlending)
    
    
    ;-[3D] - Création ou chagement des élements 3D si besoin
    Add3DArchive(#PB_Compiler_Home + "Examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
    
    ;-Camera
    Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
    CameraBackColor(Camera, RGB(0, 0, 0))
    MoveCamera(Camera, 0, 3, 5)
    CameraLookAt(Camera, 0, 1, 0)
    
    ;Ground
    Mesh = CreatePlane(-1, 10, 10, 50, 50, 2, 2)
    Material = CreateMaterial(-1, TextureID(LoadTexture(-1, "MRAMOR6X6.jpg")))
    CreateEntity(-1, MeshID(Mesh), MaterialID(Material))
    
    ;Support de particule
    Mesh = CreateSphere(-1, 0.1)
    Laser = CreateEntity(-1, MeshID(Mesh), #PB_Material_None) 
    
    ;-Light
    AmbientColor(RGB(0, 0, 0))
    Light = CreateLight(#PB_Any, RGB(255, 255, 255), 0, 10, 0, #PB_Light_Spot)
    SpotLightRange(Light, 1, 20, 3)
    
    ;-Particules 
    
    EmiterRed = CreateParticleEmitter(#PB_Any, 0, 0, 0, #PB_Particle_Point, 0, 0, 0)
    ParticleEmissionRate(EmiterRed, 1000)  
    ParticleSize(EmiterRed, 0.03, 0.03)
    ParticleEmitterDirection(EmiterRed, 1, 1, 0)
    ParticleEmitterAngle(EmiterRed, 0)
    ParticleVelocity(EmiterRed, #PB_Particle_MaximumVelocity, 10)
    ParticleTimeToLive(EmiterRed, 0.3, 0.3)
    Material = CreateMaterial(#PB_Any, TextureID(LoadTexture(-1, "flare.png")))    
    MaterialBlendingMode(Material, #PB_Material_Add)    
    DisableMaterialLighting(Material, #True)
    ParticleColorRange(EmiterRed, RGB(255, 0, 0), RGB(255, 0, 0)) 
    ParticleMaterial(EmiterRed, MaterialID(material))
    
    
    EmiterBlue = CreateParticleEmitter(#PB_Any, 0, 0, 0, #PB_Particle_Point, 0, 0, 0)
    ParticleEmissionRate(EmiterBlue, 1000)  
    ParticleSize(EmiterBlue, 0.03, 0.03)
    ParticleEmitterDirection(EmiterBlue, -1, 1, 0)
    ParticleEmitterAngle(EmiterBlue, 0)
    ParticleVelocity(EmiterBlue, #PB_Particle_MaximumVelocity, 10)
    ParticleTimeToLive(EmiterBlue, 0.3, 0.3)
    Material = CreateMaterial(#PB_Any, TextureID(LoadTexture(-1, "flare.png")))    
    MaterialBlendingMode(Material, #PB_Material_Add)    
    DisableMaterialLighting(Material, #True)
    ParticleColorRange(EmiterBlue, RGB(0, 0, 255), RGB(0, 0, 255)) 
    ParticleMaterial(EmiterBlue, MaterialID(material))
    
    
    ;-Loop
    While #True
      Repeat : Until WindowEvent() = 0
      FlipBuffers()  
      RenderGame3D()
      RenderWorld()
      RenderGame2D()
    Wend
  Else
    MessageRequester("Ooops", "Impossible de charger l'environnement 3D")
  EndIf 
EndProcedure

Procedure RenderGame3D()   
  If ExamineKeyboard()
    If KeyboardReleased(#PB_Key_Escape)
      Exit()
    EndIf  
  EndIf
  
  If KeyboardPushed(#PB_Key_Left)
    RotateCamera(Camera, 0, 1, 0, #PB_Relative)
  EndIf  
  
  If KeyboardPushed(#PB_Key_Right)
    RotateCamera(Camera, 0, -1, 0, #PB_Relative)
  EndIf  
  
  If KeyboardPushed(#PB_Key_PageUp)
    MoveCamera(Camera, 0, 0.1, 0, #PB_Relative)
  EndIf  
  
  If KeyboardPushed(#PB_Key_PageDown)
    MoveCamera(Camera, 0, -0.1, 0, #PB_Relative)
  EndIf  
  
  If ExamineMouse()
  EndIf   
EndProcedure

Procedure RenderGame2D()
  StartDrawing(SpriteOutput(Bottom))
  DrawingMode(#PB_2DDrawing_AlphaChannel)
  Box(0, 0, ScreenWidth(), SpriteWidth(Bottom), RGBA(0, 0, 0, 110))
  DrawingMode(#PB_2DDrawing_Transparent)
  DrawText(30, 10, ". : : Help : : .")
  DrawText(30, 40, "<--- ou ---> Rotation gauche ou droite de la caméra.")
  DrawText(30, 70, "Page-Up or Page-Down Déplacement vertical de la caméra.")
  DrawText(30, 100, "Esc quitter.")
  
  StopDrawing()
  DisplayTransparentSprite(Bottom, 0, ScreenHeight() - SpriteHeight(Bottom))
EndProcedure

Procedure Exit()
  End
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.03 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 : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Demande de tuto "Particle"

Message par Ar-S »

Merci pour ce second exemple :) Cool 8)
Y'a t il une raison particulière aux -1 des éléments Mesh et entités ?
( Mesh = CreatePlane(-1, 10, 10, 50, 50, 2, 2) etc.. )

--- edit ----
Pigé => #PB_Any

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

Re: Demande de tuto "Particle"

Message par Micoute »

Je pense que -1 peut être remplacé par #PB_Any, car j'ai vu Mesh = ...
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 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Guillot
Messages : 532
Inscription : jeu. 25/juin/2015 16:18

Re: Demande de tuto "Particle"

Message par Guillot »

mon exemple qui illustre notamment les 3 nouvelles fonctions relatives aux particules
(elle à été intégré dans les exemples, mais modifiée et sans les commentaires)

je te conseil de garder ma fonction CreateEmitter
qui spécifie DisableMaterialLighting(material, 1) (indispenssable)
et qui corrige l'inversion height/depth de la fonction CreateParticleEmitter(n, width, depth, height,#PB_Particle_Box)

Code : Tout sélectionner

;--------------------------------------------------------------
;                            Particules
;                            ==========
;
; ParticleAcceleration(particleID, x.f, y.f, z.f)
; -----------------------------------------------
;
; permet d'appliquer une accelération aux particules
; pour simuler la gravité, le vent...
; x,y,z represente le vecteur directeur de l'accelération
;
; ParticleColorFader(particleID, r.f, g.f, b.f, a.f)
; --------------------------------------------------
;
; permet de changer la couleur (canal alpha inclu) au cour du temps
; les valeurs r, g, b, a correspondent à la variantion des composantes couleur en 1 seconde. ex:
; 0: aucun changement 
; -1: diminution de 256 de la composante en 1 seconde
; +1: augmentation de 256 de la composante en 1 seconde
;
; ParticleEmitterAngle(particleID, angle.f)
; -----------------------------------------
;
; permet de spécifier l'angle du cone de dispertion (en degree)
;
;----------------------------------------------------------------


InitEngine3D():InitSprite():InitKeyboard():InitMouse()
OpenWindow(0, 0, 0, 0,0, "",#PB_Window_Maximize|#PB_Window_BorderLess)
ex=WindowWidth (0,#PB_Window_InnerCoordinate)
ey=WindowHeight(0,#PB_Window_InnerCoordinate)
OpenWindowedScreen(WindowID(0), 0, 0, ex, ey, 0, 0, 0)

Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
Parse3DScripts()

LoadTexture(0, "dirt.jpg")
CreateMaterial(0, TextureID(0))
CreatePlane (0,256,256,1,1,8,8):CreateEntity(0, MeshID(0), MaterialID(0),0,0,0)
 
LoadTexture(1, "smoke.png")
CreateMaterial(1, TextureID(1))
MaterialBlendingMode   (1, #PB_Material_AlphaBlend)

LoadTexture(2, "flare.png")
CreateMaterial(2, TextureID(2))
MaterialBlendingMode   (2, #PB_Material_Add)

Procedure CreateEmitter(n,material,size.f,rate.f,mintime.f,maxtime.f,angle.f=0,width.f=0,height.f=0,depth.f=0)
    DisableMaterialLighting(material, 1)
    nn=CreateParticleEmitter(n, width, depth, height,#PB_Particle_Box):If n=-1:n=nn:EndIf
    ParticleEmitterAngle(n,angle)
    ParticleMaterial(n, MaterialID(material))
    ParticleSize(n,size,size)
    ParticleEmissionRate(n,rate)
    ParticleTimeToLive  (n,mintime,maxtime)
    ProcedureReturn n    
EndProcedure

;emetteur 1 : feu
;----------------
CreateEmitter(1,1,5,150,2,2,30)
MoveParticleEmitter(1,50,5,50)
ParticleColorRange(1, $00ffff, $0000ff)
ParticleColorFader(1, -0.5, -0.5, -0.5, -0.5)
ParticleEmitterDirection(1, 0, 1, 0)
ParticleVelocity(1, 2,20)
ParticleAcceleration(1, 0.2, 0, 0)


;emetteur 2 : feu d'artifice
;---------------------------
CreateEmitter(2,2,5,100,1,2,30)
MoveParticleEmitter(2,-50,0,50)
ParticleColorRange(2, $ff0000, $0000ff)
ParticleEmitterDirection(2, 0, 1, 0)
ParticleVelocity(2, 2,80)
ParticleAcceleration(2, 0, -1, 0)

;emetteur 3 : neige
;------------------
createemitter(3,2,2,50,4,4,10,50, 0, 50)
ParticleEmitterDirection(3, 0, 1, 0)
ParticleVelocity(3, 2,-10)
MoveParticleEmitter(3,50,40,-50)

;emetteur 4 : torche multicolor
;------------------------------
CreateEmitter(4,1,5,50,1,1,5)
 ParticleColorRange(4, $ffff00, $00ff00)
 ParticleColorFader(4, 0,0,0, -1)
 ParticleVelocity(4, 2,35)
 ParticleAcceleration(4, -0.5, 0, 0)
 ParticleEmitterDirection(4, 0, 1, 0)
 MoveParticleEmitter(4,-50,5,-50)
 
;emetteur 5 : noir au centre
;---------------------------
 CreateEmitter(5,1,4,100,1,1)
 ParticleColorRange(5, $000000, $000000)
 ParticleColorFader(5, 0,0,0, -1)
 ParticleVelocity(5, 2,30)
 ParticleEmitterDirection(5, 0, 1, 0)
     
CreateCamera(0, 0, 0, 100, 100)
CameraBackColor(0,$555555)

Repeat
  ExamineKeyboard()
  a.f+0.005
  MoveCamera(0,Cos(a)*100,40,Sin(a)*100,0)
  MoveParticleEmitter(5,Sin(a*20)*10,5,Cos(a*20)*10,0)
  CameraLookAt(0,0,0,0)
  RenderWorld()
  FlipBuffers()    
Until WindowEvent() = #PB_Event_CloseWindow Or KeyboardReleased(#PB_Key_Escape)
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Demande de tuto "Particle"

Message par Ollivier »

Petite parenthèse à Falsam.
Je mettais 16 à la place de #Pb_Event_CloseWindow puis cette constante a changé de valeur. Résultat : des codes devenus non fonctionnels.
Et je ne sais pas si les constantes sont comprises dans le LTS. Sinon, il peut t'arriver la même bricole si tu prenais cette habitude.
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Demande de tuto "Particle"

Message par Ar-S »

Merci Guillot pour ces exemples et les comments.
Avec tout ça je devrais m'en sortir même si j'aurai surement d'autre questions.

@Olivier. Tu ne veux pas dire l'inverse ?
~~~~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
Répondre