Page 1 of 1

The particle face

Posted: Wed Mar 09, 2016 8:41 pm
by DK_PETER

Code: Select all

;--------------------------------------------------
;Yet another mish mash
; By DK_PETER
;--------------------------------------------------
; Particle fun
;--------------------------------------------------
;it can get a lot more detailed...
;Just tweak and add particles and colors as needed.
;--------------------------------------------------

InitEngine3D()
InitSprite()
InitKeyboard()

Declare.i MakeFace()

Global NewList pa.i(), Quit = #False

OpenWindow(0, 0, 0, 1024, 768, "The Face", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0), 0, 0, 1024, 768)
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 0, 10)

MakeFace()

Repeat
  
  Repeat
    ev = WindowEvent()
    If ev = #PB_Event_CloseWindow : Quit = #True : EndIf
  Until ev = 0
  
  RenderWorld()
  
  ExamineKeyboard()
  
  FlipBuffers()
  
Until KeyboardPushed(#PB_Key_Escape) Or Quit = #True  


Procedure.i MakeFace()
  Protected Dim ma.i(1)
  Protected Dim tx.i(1)
  
  tx(0) = CreateTexture(#PB_Any, 128, 128)
  StartDrawing(TextureOutput(tx(0)))
  DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Gradient)
  FrontColor($FF000000)
  BackColor($7E667C84)
  CircularGradient(64, 64, 60)
  Circle(64, 64, 60)
  StopDrawing()
  ma(0) = CreateMaterial(#PB_Any, TextureID(tx(0)))
  MaterialBlendingMode(ma(0), #PB_Material_Add)
  
  tx(1) = CreateTexture(#PB_Any, 128, 128)
  StartDrawing(TextureOutput(tx(1)))
  DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Gradient)
  FrontColor($FF000000)
  BackColor($7E204692)
  CircularGradient(64, 64, 60)
  Circle(64, 64, 60)
  StopDrawing()
  ma(1) = CreateMaterial(#PB_Any, TextureID(tx(1)))
  MaterialBlendingMode(ma(1), #PB_Material_Add)
  
  AddElement(pa())
  
  pa() = CreateParticleEmitter(#PB_Any, 0.3, 0.1, 0.1, #PB_Particle_Point, 1, 1, 0)
  ParticleEmissionRate(pa(), 300)
  ParticleMaterial(pa(), MaterialID(ma(0)))
  ParticleEmitterDirection(pa(), -1, -0.1, 0)
  ParticleVelocity(pa(), 0.01, 0.01)
  ParticleTimeToLive(pa(), 0.2, 0.2)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 0.8, 0.2)
  
  AddElement(pa())
  pa() = CreateParticleEmitter(#PB_Any, 0.3, 0.1, 0.1, #PB_Particle_Point, -1, 0.85, 0)
  ParticleEmissionRate(pa(), 300)
  ParticleMaterial(pa(), MaterialID(ma(0)))
  ParticleEmitterDirection(pa(), -0.23, -1, 0)
  ParticleVelocity(pa(), 0.01, 0.01)
  ParticleTimeToLive(pa(), 0.2, 0.2)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 0.2, 0.8)
  
  AddElement(pa())
  pa() = CreateParticleEmitter(#PB_Any, 0.3, 0.1, 0.1, #PB_Particle_Point, 1, 0.85, 0)
  ParticleEmissionRate(pa(), 300)
  ParticleMaterial(pa(), MaterialID(ma(0)))
  ParticleEmitterDirection(pa(), 0.23, -1, 0)
  ParticleVelocity(pa(), 0.01, 0.01)
  ParticleTimeToLive(pa(), 0.2, 0.2)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 0.2, 0.8)
  
  AddElement(pa())
  pa() = CreateParticleEmitter(#PB_Any, 0.3, 0.1, 0.1, #PB_Particle_Point, -1, -0.35, 0)
  ParticleEmissionRate(pa(), 300)
  ParticleMaterial(pa(), MaterialID(ma(0)))
  ParticleEmitterDirection(pa(), 0.23, -1, 0)
  ParticleVelocity(pa(), 0.01, 0.01)
  ParticleTimeToLive(pa(), 0.14, 0.14)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 0.2, 0.8)
  
  AddElement(pa())
  pa() = CreateParticleEmitter(#PB_Any, 0.3, 0.1, 0.1, #PB_Particle_Point, 1, -0.35, 0)
  ParticleEmissionRate(pa(), 300)
  ParticleMaterial(pa(), MaterialID(ma(0)))
  ParticleEmitterDirection(pa(), -0.23, -1, 0)
  ParticleVelocity(pa(), 0.01, 0.01)
  ParticleTimeToLive(pa(), 0.14, 0.14)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 0.2, 0.8)
  
  AddElement(pa())
  pa() = CreateParticleEmitter(#PB_Any, 0.3, 0.1, 0.1, #PB_Particle_Point, 0, -1.5, 0)
  ParticleEmissionRate(pa(), 300)
  ParticleMaterial(pa(), MaterialID(ma(0)))
  ParticleEmitterDirection(pa(), -1, 0, 0)
  ParticleVelocity(pa(), 0.01, 0.01)
  ParticleTimeToLive(pa(), 0.12, 0.12)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 0.8, 0.2)
  
  AddElement(pa())
  pa() = CreateParticleEmitter(#PB_Any, 0.3, 0.1, 0.1, #PB_Particle_Point, 0, -1.5, 0)
  ParticleEmissionRate(pa(), 300)
  ParticleMaterial(pa(), MaterialID(ma(0)))
  ParticleEmitterDirection(pa(), 1, 0, 0)
  ParticleVelocity(pa(), 0.01, 0.01)
  ParticleTimeToLive(pa(), 0.12, 0.12)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 0.8, 0.2)
  
  AddElement(pa())
  pa() = CreateParticleEmitter(#PB_Any, 0.1, 0.1, 0.1, #PB_Particle_Point, 0.3, 0.55, 0)
  ParticleEmissionRate(pa(), 300)
  ParticleMaterial(pa(), MaterialID(ma(0)))
  ParticleEmitterDirection(pa(), 1, -0.15, 0)
  ParticleVelocity(pa(), 0.01, 0.01)
  ParticleTimeToLive(pa(), 0.09, 0.09)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 0.2, 0.1)
  
  AddElement(pa())
  pa() = CreateParticleEmitter(#PB_Any, 0.1, 0.1, 0.1, #PB_Particle_Point, -0.3, 0.55, 0)
  ParticleEmissionRate(pa(), 300)
  ParticleMaterial(pa(), MaterialID(ma(0)))
  ParticleEmitterDirection(pa(), -1, -0.15, 0)
  ParticleVelocity(pa(), 0.01, 0.01)
  ParticleTimeToLive(pa(), 0.09, 0.09)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 0.2, 0.1)
  
  AddElement(pa())
  pa() = CreateParticleEmitter(#PB_Any, 0.1, 0.1, 0.1, #PB_Particle_Point, -0.39, 0.36, 0)
  ParticleEmissionRate(pa(), 100)
  ParticleMaterial(pa(), MaterialID(ma(0)))
  ParticleEmitterDirection(pa(), 0, 0, 0)
  ParticleVelocity(pa(), 0.01, 0.01)
  ParticleTimeToLive(pa(), 0.09, 0.09)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 0.6, 0.1)
  
  AddElement(pa())
  pa() = CreateParticleEmitter(#PB_Any, 0.1, 0.1, 0.1, #PB_Particle_Point, 0.39, 0.36, 0)
  ParticleEmissionRate(pa(), 100)
  ParticleMaterial(pa(), MaterialID(ma(0)))
  ParticleEmitterDirection(pa(), 0, 0, 0)
  ParticleVelocity(pa(), 0.01, 0.01)
  ParticleTimeToLive(pa(), 0.09, 0.09)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 0.6, 0.1)
  
  AddElement(pa())
  pa() = CreateParticleEmitter(#PB_Any, 0.1, 0.1, 0.1, #PB_Particle_Point, 0, 0, 0)
  ParticleEmissionRate(pa(), 100)
  ParticleMaterial(pa(), MaterialID(ma(0)))
  ParticleEmitterDirection(pa(), 0, 0, 0)
  ParticleVelocity(pa(), 0.01, 0.01)
  ParticleTimeToLive(pa(), 0.09, 0.09)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 0.2, 0.9)
  
  AddElement(pa())
  pa() = CreateParticleEmitter(#PB_Any, 0.1, 0.1, 0.1, #PB_Particle_Point, 0, -0.7, 0)
  ParticleEmissionRate(pa(), 100)
  ParticleMaterial(pa(), MaterialID(ma(0)))
  ParticleEmitterDirection(pa(), 0, 0, 0)
  ParticleVelocity(pa(), 0.01, 0.01)
  ParticleTimeToLive(pa(), 0.09, 0.09)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 1.2, 0.3)
  
  AddElement(pa())
  pa() = CreateParticleEmitter(#PB_Any, 0.1, 0.1, 0.1, #PB_Particle_Point, -2, 0, 0)
  ParticleEmissionRate(pa(), 100)
  ParticleMaterial(pa(), MaterialID(ma(1)))
  ParticleEmitterDirection(pa(), 0, 1, 0)
  ParticleVelocity(pa(), 0.01, 0.03)
  ParticleTimeToLive(pa(), 0.09, 0.19)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 0.3, 1.3)
  
  AddElement(pa())
  pa() = CreateParticleEmitter(#PB_Any, 0.1, 0.1, 0.1, #PB_Particle_Point, 2, 0, 0)
  ParticleEmissionRate(pa(), 100)
  ParticleMaterial(pa(), MaterialID(ma(1)))
  ParticleEmitterDirection(pa(), 0, 1, 0)
  ParticleVelocity(pa(), 0.01, 0.03)
  ParticleTimeToLive(pa(), 0.09, 0.19)
  ParticleSpeedFactor(pa(), 0.2)
  ParticleSize(pa(), 0.3, 1.3)
EndProcedure

Re: The particle face

Posted: Thu Mar 10, 2016 10:35 am
by Kwai chang caine
Works very well, funny effect :D
Thanks for sharing 8)

Re: The particle face

Posted: Thu Mar 10, 2016 10:50 am
by Joris
Nice.

This time Renderworld() works fine here without an IMA, which I almost get everytime if not using OpenGL ?

Re: The particle face

Posted: Thu Mar 10, 2016 11:44 am
by bbanelli
Joris wrote:Nice.

This time Renderworld() works fine here without an IMA, which I almost get everytime if not using OpenGL ?
I was also pleasantly surprised, worked without any intervention! Nice example! :)