Sehr einfache Partikel engine(3D) von Jan_
Hy Leute,

Es ist soweit, ich setzte auch mal was ins Archiev.
Eine ganz kleine Partikel engine, sie kann nicht viel, ist dafür aber einfach.

So, das ganze gibt es mit Beispiel
[url=http://people.freenet.de/chopper/Partikel.zip]Hier (67,3KB)[/url]

[code:1:9e5eadaf69]
;----------------------------------------------------------
;--------Ein Partikeleffekt--------------------------------
;------------von Jan Kuhnert-------------------------------
;----------------Wer das benutzt,--------------------------
;--------------------Trägt mich in die Credits-------------
;-------------------------ein, das ist doch drin! oder?----
;----------------------------------------------------------
Dim Partikel(0,0)
Global Partikel_Sprite

Function SetPartikel(Anzahl,Collisions-Typ-Nummer) ; Vorinstallation der Partikel und setzen der Dim-Felder, Setzen des Collisionstypes
Dim Partikel(Anzahl+1,13)
Partikel(0,1)=Anzahl
Partikel(0,2)=Collisions-Typ-Nummer
End Function

Function LoadPartikel(Datei$) ; Laden der Partikel, unter angabe des Namen des Partikels
Partikel_Sprite=LoadSprite(Datei$,2)
HideEntity Partikel_Sprite
End Function

Function CreatePartikel(Geschwindigkeit,Winkel,Fallbeschleunigung,xstart,ystart,zstart,Timedivi,ScaleStart,Scale,AlphaStart,Alpha,Richtung,R,G,B) ;erstellen der Partikel
Partikel(0,0)=Partikel(0,0)+1
If Partikel(0,0)>Partikel(0,1) Then Partikel(0,0)=1
If Partikel(nummer,0) > 0
DelPartikel(Partikel(0,0))
End If
Partikel(Partikel(0,0),0)=CopyEntity(Partikel_Sprite)
EntityColor Partikel(Partikel(0,0),0),R,G,B
Partikel(Partikel(0,0),1)=Geschwindigkeit ;Wurfgeschwindigkeit in M/S
Partikel(Partikel(0,0),2)=Winkel ;Winkel in Grad
Partikel(Partikel(0,0),3)=Fallbeschleunigung ;Fallbeschleunigung in M/S²*100
Partikel(Partikel(0,0),5)=xstart ; X-Start
Partikel(Partikel(0,0),6)=ystart ; Y-Start
Partikel(Partikel(0,0),7)=zstart ; Z-Start
Partikel(Partikel(0,0),8)=Timedivi ; Zeitlupenmodus
Partikel(Partikel(0,0),9)=ScaleStart ; Starten der Skalierung
Partikel(Partikel(0,0),10)=Scale ; Skalierungs Faktor
Partikel(Partikel(0,0),11)=AlphaStart ; Start von der Durchsichtigkeit
Partikel(Partikel(0,0),12)=Alpha ; Durchsichtigkeits Faktor
Partikel(Partikel(0,0),13)=Richtung; Richtung in Grad
;R, G, B = Farbe des Sprites (meistens 255,255,255)
PositionEntity Partikel(Partikel(0,0),0),xstart,ystart,zstart
EntityType Partikel(Partikel(0,0),0),Partikel(0,2)
End Function

Function UpdatePartikel() ; Partikel bewegen
nummer=0
Repeat
nummer = nummer + 1
If Partikel(nummer,0) > 0 Then
XBerechnet#=Float(Partikel(Partikel(0,0),1))*(Float(Partikel(nummer,4))/Partikel(nummer,8))*Cos(Float(Partikel(nummer,2)))
Berechnet#=(Float(Partikel(nummer,3))/200*-1)*(XBerechnet#*XBerechnet#)/((Partikel(nummer,1)*Partikel(nummer,1))*(Cos(Partikel(nummer,2))*Cos(Partikel(nummer,2))))+XBerechnet#*Tan(Partikel(nummer,2))
XAchse#=Sin(Float(Partikel(nummer,13)))*XBerechnet#
YAchse#=Cos(Float(Partikel(nummer,13)))*XBerechnet#
PositionEntity Partikel(nummer,0),Partikel(nummer,5)+Xachse,Partikel(nummer,6)+Berechnet#,Partikel(nummer,7)+YAchse
Partikel(nummer,4)=Partikel(nummer,4)+1
If Partikel(nummer,4) - Partikel(nummer,9)
Zwischenwert#=(Partikel(nummer,4)-Partikel(nummer,9))*(Float(Partikel(nummer,10))/1000)+1
ScaleSprite Partikel(nummer,0),Zwischenwert#,Zwischenwert#
End If
If Partikel(nummer,4) - Partikel(nummer,11) >0
Zwischenwert#=1-(Float(Partikel(nummer,12))/1000)*(Partikel(nummer,4)-Partikel(nummer,11))
EntityAlpha Partikel(nummer,0),Zwischenwert#
If Zwischenwert# <= 0 Then DelPartikel(nummer)
End If
End If
Until nummer=Partikel(0,1)
End Function

Function DelPartikel(nummer); Partikel löschen
FreeEntity Partikel(nummer,0)
Partikel(nummer,0) = 0
Partikel(nummer,4) = 0
End Function
[/code:1:9e5eadaf69]

Ich hoffe es gefällt euch!

Bei großem Interresse gibt es noch mehr dazu!

cu
===
von ???
hmm
du hast da irgend nen fehler drin, wegen Collisions-typ der denkt COLLISIONS ware ein bb befehl
[EDIT]
*g hab das beispiel oben uebersehen
===
Re: Sehr einfache Partikel engine(3D) von ???
[quote:bb6718a757="Jan_"]
So, das ganze gibt es mit Beispiel
[url=http://people.freenet.de/chopper/Partikel.zip]Hier (67,1KB)[/url]
[/quote:bb6718a757]

...
===
von Jan_
Nein, Sparx hatte recht, in der Partikel.bb ist eine Variable mit dem Namen Collisions-Typ-Numer, der editor erkennt Collisions als schlüßelwort, weil danach ein Strich ist!

Ich habe es mal berichtigt und noch mal Hochgeladen:

[url=http://people.freenet.de/chopper/Partikel.zip]Hier klicken zum Downloaden[/url]


http://people.freenet.de/chopper/Partikel.zip
===
von ???
naja in dem beispiel is immer noch ein fehler...

aber *woot* das erste b3d prog wasses bei mir auf über 1000 fps bringt *g*
===
von ???
hmm, 390 fps bei mir... frage mich weshalb... es ist keinerlei optimierung zu erkennen...
===
von ???
Jan: Deine Partikel Engine ist Nett. Aber du benutzt, en wenig, zu wenig Partikeln.

Inarie: dim statt type etc. - Das ist die Optimierung. Wobei: In C++ wäre es wirklich keine Optimierung array statt klassen/strukturen zu benutzen.
Aber BB nutzt ja allein schon für ein Type zwei strukuren/klassen. Einmal für den Typ selber, und einmal für jede variable in einen Typ.
Und hier dauert halt die suche bei BlitzBasic für eine Variable um einen wert zu lesen/schreiben.
Ahja. Wenn du nun sagst, dass wären in wirklichkeit pointer, da muss ich dich enttäuschen: Wie wird sonst nach beenden eines BB Programm der Speicher wieder freigegeben? Abgesehen vom "end" befehl.

Hat hiermit zwar nichts zu tun. Ich wollte nur deine kleine Frage beantworten.

cu
===
von ???
array statt type... wenn ich zufallsgeneriert einige sprites in der gegend setze, sodass ich 6000 tris habe, dann kommen bei mir sonst auch keine 350 fps mehr raus ^^
===
von ???
@ionpainter, wo ist denn der Fehler?

Ich habe auf geschwindigkeit geachtet, weil es ja auch in mein Aktuelles Projekt einfließt! ([url=http://www.blitzforum.de/viewtopic.php?t=5461]DX-AS[/url])
===
von ???
Hi,

verstehe nicht, warum es bei einigen rennt !

Bei mir kommt da nämlich ein Fehler: Duplikate ....

Und zwar hier:
Global Partikel_Sprite

Toni
===
von ???
jo, das ist ein fehler. aber offensichtlich hat es jeder hinbekommen, die zeile auszukommentieren...bis auf...HotBit :P
===
von Jan_
Okey,

Sorry, ich habe das was in der anderen Datei einfach reingesetzt.

Die richtige ist jetzt oben!

[url=http://people.freenet.de/chopper/Partikel.zip]Hier klicken zum downloaden (67.3KB) [/url]

Achja, kann überall benutzt werden, auch in komerziellen Programmen, nur 1nen Credits eintrag!



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: