The particle face

Everything related to 3D programming
User avatar
DK_PETER
Addict
Addict
Posts: 904
Joined: Sat Feb 19, 2011 10:06 am
Location: Denmark
Contact:

The particle face

Post 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
Current configurations:
Ubuntu 20.04/64 bit - Window 10 64 bit
Intel 6800K, GeForce Gtx 1060, 32 gb ram.
Amd Ryzen 9 5950X, GeForce 3070, 128 gb ram.
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5524
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: The particle face

Post by Kwai chang caine »

Works very well, funny effect :D
Thanks for sharing 8)
ImageThe happiness is a road...
Not a destination
Joris
Addict
Addict
Posts: 890
Joined: Fri Oct 16, 2009 10:12 am
Location: BE

Re: The particle face

Post by Joris »

Nice.

This time Renderworld() works fine here without an IMA, which I almost get everytime if not using OpenGL ?
Yeah I know, but keep in mind ... Leonardo da Vinci was also an autodidact.
User avatar
bbanelli
Enthusiast
Enthusiast
Posts: 544
Joined: Tue May 28, 2013 10:51 pm
Location: Europe
Contact:

Re: The particle face

Post 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! :)
"If you lie to the compiler, it will get its revenge."
Henry Spencer
https://www.pci-z.com/
Post Reply