Vulkan in PB mit Strahlen

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Kanns ja hier dann nochmal posten.
yo, das wär cool!
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Ich konnts nich lassen das ganze selber mal ein bisschen abzuändern, habs in ne LinkedList mit Struktur gepackt und ein bisschen verschönert, vll kanns ja der eine oder andere Neuling gebrauchen deswegen hab ich ein paar Kommentare reingebaut...

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitMouse()


W.l = 1280 ;Screen-Breite
H.l = 1024 ;Screen-Höhe

If OpenScreen(W,H,32,"Vulkan Partikelstrahlen") = 0
  End
EndIf

Structure dat ;Partikeldaten-Structur
  x.f
  y.f
  oldx.l
  oldy.l
  xm.f
  ym.f
  c.w
EndStructure

NewList p.dat() ;Partikelliste erstellen

Repeat
  
  
  
  ExamineKeyboard()
  ExamineMouse()
  
  ClearScreen(0)


  If MouseButton(1) 
  
   For x = 1 To 5 ;Gleich 5 auf einmal für mehr Volumen
    
    AddElement(p()) ;Neuen Partikel erstellen
     ;Startposition an Maus:
      p()\x = MouseX()
      p()\y = MouseY()
      p()\oldx = MouseX()
      p()\oldy = MouseY()
     ;Startgeschwindigkeit zufällig:
      p()\xm = (Random(200)-100)/100
      p()\ym = -(Random(300)/100)-4
     ;Zur Quradratbildungsvermeindung:
      p()\ym + Abs(p()\xm)-1
     ;Start-Farbe:
      p()\c = 511
     
   Next
   
  EndIf
  
  If MouseButton(2)
    ClearList(p()) ;Alle Partikel löschen
  EndIf



  StartDrawing(ScreenOutput())

    ForEach p()
      
     ;Alte Werte merken
      oldx = p()\x
      oldy = p()\y
      
     ;Partikelbewegung
      p()\ym + 0.05 ;Geschwindigkeit nach unten nimmt zu
      p()\x + p()\xm ;X-Position wird geändert
      p()\y + p()\ym ;Y-Position wird geändert
      p()\c - 2 ;Farbe wird dunkler
      

      
      If p()\c < 0 Or p()\y > H+10 Or p()\x < -10 Or p()\x > W+10 ;Wenn Schwarz oder außerhalb des Bildschirms
      
        DeleteElement(p()) ;Partikel kann weg
        
      Else
       
       ;Farbe bestimmen:
        If p()\c > 256 ;Gelb nach Rot
          color = RGB(255,p()\c-256,0)
        Else ;Rot nach Schwarz
          color = RGB(p()\c,0,0)
        EndIf
        
       ;Dunkler für den alten Teil:
        If p()\c-20 > 256 ;Gelb nach Rot
          darkcolor = RGB(255,p()\c-256-20,0) 
        ElseIf p()\c-20 > 0 ;Rot nach Schwarz
          darkcolor = RGB(p()\c-20,0,0)
        Else
          darkcolor = 0
        EndIf
        
       ;Beide Teile Zeichnen:
        LineXY(oldx,oldy,p()\oldx,p()\oldy,darkcolor) ;Alten Teil nochmal zeichnen
        
        LineXY(p()\x,p()\y,oldx,oldy,color) ;Neuen Teil zeichnen

       ;Alte Werte eintragen:
        p()\oldx = oldx
        p()\oldy = oldy
        
      EndIf
      
      
      
    Next
  
    Circle(MouseX(),MouseY(),4,RGB(255,255,128)) ;Maus Zeichnen
  
  StopDrawing()
  
  
  FlipBuffers()
  
Until KeyboardPushed(#PB_Key_Escape)

CloseScreen()

End 
(\/) (°,,,°) (\/)
Häns
Beiträge: 47
Registriert: 27.10.2007 14:30
Wohnort: Kölle

Beitrag von Häns »

@Keykon: :o

Cool! :allright:

Häns
PB 5.6
Windows 7 Professional
Benutzeravatar
mpz
Beiträge: 505
Registriert: 14.06.2005 15:53
Computerausstattung: Win 11 Pro, 48 GB Ram, Intel I7 CPU und RX4070 Grafikkarte, PB (4/5) 6.12LT
Wohnort: Berlin, Tempelhof

Beitrag von mpz »

Hi,

Ich habe jetzt auch eine Partikelengine in meine MP_3D Engine integriert. Genug Parameter hat es wie:

Wind, Gravitation, Richtung, Bewegung, Drehung, Anzahl der Partikel, Grösse, Stärke, Textur ändern etc... allerdings im 3D Raum. Ein kleines Beispiel liegt als EXE dabei und der Sourcecode auch...

Weiss jemand warum die Partikeldemo von Ogre (findet man PureBasic\Examples\Sources\Particle.pb) 50% der CPU Zeit kostet?

Gruß Michael

http://rapidshare.de/files/40968593/MP_ ... o.exe.html

Code: Alles auswählen


;////////////////////////////////////////////////////////////////
;//
;// Project Title: MP 3D Engine
;// File Title: MP_DX9_Partikel.pb
;// Created On: 22.11.2008
;// Updated On: 
;// Author: Michael Paulwitz
;// OS:Windows
;// 
;// Demofile für meine Partikelengine
;// 
;////////////////////////////////////////////////////////////////

;-
;- ProgrammStart


MP_Graphics3D (640,480,0,3) ; Erstelle ein WindowsFenster #Window = 0
SetWindowTitle(0, "3D Partikel Test") ; So soll es heissen

Particle.l = MP_CreateParticleEmitter() ; Fontaine mit Wind
MP_PositionEntity (Particle,3,0,0) ; Setzt ein Objekt an einen x,y,z Ort
MP_ParticleColorRange (Particle,RGB(255,255,255),RGB(255,255,255)) ; Farbe von RGB Wert zu RGB Wert
MP_ParticleEmissionRate (Particle,500,5,0.05); Maximale Partikel, Ausstoßmenge und Zeiteinheit in s dafür
MP_ParticleTimeToLive(Particle, 3, 6); Partikellebenszeit von s bis s
MP_ParticleSize (Particle,0.5); Partikelgrösse
MP_ParticleVelocity(Particle,0,5,0,1.5); Ausstossrichtung als x,y,z und Verteilungsstärke
MP_ParticleWind(Particle, 2, 0 ,0); Wind als x,y,z    

Particle2.l = MP_CreateParticleEmitter() ; Explosion
MP_ParticleColorRange (Particle2,RGB(0,0,0),RGB(255,0,0)) ; Farbe von RGB Wert zu RGB Wert
MP_ParticleEmissionRate (Particle2,100,100,0.05);  Maximale Partikel, Ausstoßmenge und Zeiteinheit in s dafür
MP_ParticleTimeToLive(Particle2, 0.4, 0.6); Partikellebenszeit von s bis s
MP_ParticleSize (Particle2,2); Partikelgrösse
MP_ParticleVelocity(Particle2,0,0,0,10); Ausstossrichtung als x,y,z und Verteilungsstärke
  
Particle3.l = MP_CreateParticleEmitter() ;Vulkan aus MPs
MP_PositionEntity (Particle3,-5,0,0) ; Setzt ein Objekt an einen x,y,z Ort
MP_ParticleColorRange (Particle3,RGB(0,0,0),RGB(255,255,255)) ; Farbe von RGB Wert zu RGB Wert
MP_ParticleEmissionRate (Particle3,100,10,0.05);  Maximale Partikel, Ausstoßmenge und Zeiteinheit in s dafür
MP_ParticleTimeToLive(Particle3, 3, 4); Partikellebenszeit von s bis s
MP_ParticleVelocity(Particle3,0,5,0,2.5); Ausstossrichtung als x,y,z und Verteilungsstärke
MP_ParticleGravity(Particle3,0,-5,0) ; Gravitatio als x,y,z    

Textur = MP_CreateTextureFromFileInMemory (?logostart,?logostart-?logostop)
MP_EntityTexture(Particle3,Textur)

camera=MP_CreateCamera() ; Kamera erstellen

x.f=0 : y.f=0 : z.f = -18 
MP_PositionCamera(camera,x.f,y.f,z.f) ; Kameraposition 

light=MP_CreateLight(1,90,0,0) ; Es werde Licht

cube=MP_CreateCube() ; Nen Würfel

MP_EntityColor (cube,100,100,255) ; Würfel färben als R,G,B Wert

While Not MP_KeyDown(#PB_Key_Escape) And Not MP_WindowEvent() = #PB_Event_CloseWindow; Esc abfrage oder schliessen
    
    MP_DrawText (10,10,RGB(255,255,255),"Läuft mit "+Str(MP_FPS ())+" FPS") ; Textanzeige an Position x,y, Farbe RGB und Text$
    MP_TurnEntity (cube,0.05,0.5,1) ; Würfel Drehen
    MP_RenderWorld () ; Hier gehts los
    MP_Flip () ; 

Wend

End

DataSection
  logostart:
  IncludeBinary "c:\programme\purebasic\media\mp_logo.png" ; Mein MP Bild included
  logostop:
EndDataSection

Working on :lol: - LibSGD - MP3D Engine - 8)
Antworten