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! |