> Kanns ja hier dann nochmal posten.
yo, das wär cool!
Vulkan in PB mit Strahlen
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- 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:
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
(\/) (°,,,°) (\/)
- 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
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
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
- LibSGD - MP3D Engine - 

