Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
0oFreako0
Anmeldungsdatum: 17.12.2011 Beiträge: 114
|
Verfasst am: 17.12.2011, 16:17 Titel: Particle Engine coden? |
|
|
Hi Leute,
ich hab da mal eine Frage an euch.
Ich wollte mir ein kleines Particle System schreiben und weiss jetzt nicht genau wo ich anfangen soll.
Gibt es irgentwelche guten Tuts dazu oder hat jemand vielleicht ein paar Denkanstösse für mich?
Gruss FBFreak. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 17.12.2011, 16:34 Titel: |
|
|
es gibt sicher tuts zu partikelsystemen allgemein mit ganz viel mathe drin, oder vielleicht sogar in verschiedenen modernen programmiersprachen (c/java, evtl matlab). Aber vermutlich nichts direkt in Freebasic. Was ist denn dein Kenntnisstand? was suchst du? Kannst du FB schon, kannst du opengl oder irgendeine andere art von 3d grafik schon, kannst du mathe schon, weißt du schon was über dynamische simulation?
tust du das nur um mal sowas entwickelt zu haben um zu wissen wie das so ist? dann könntest du vermutlich die einfachere variante einer simulation in 2D versuchen. Oder möchtest du gezielt das ganze in 3D machen? _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
0oFreako0
Anmeldungsdatum: 17.12.2011 Beiträge: 114
|
Verfasst am: 17.12.2011, 18:49 Titel: |
|
|
Also FB ist kein Problem ,Mathe auch nicht. Ich wollte es ja nicht direkt in 3D machen sondern eine 2D Simulation. Wollte mir das mal aus Informations-Testzwecken programmieren. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 17.12.2011, 23:29 Titel: |
|
|
naja 2d partikelengine ist jetzt nicht so das wunderwerk, das kriegt man ausm kopf zusammen. Du hast hauptsächlich 2 Entitäten:
Partikel bestehend aus position x,y und geschwindigkeiten vx,vy, verbleibende Lebensdauer t (kann man zB als Halbwertszeit modelieren oder als einfache deadline) und dann noch spaßfunktionen die dir Farbe oder Sprite, möglicherweise in abhängigkeit der anderen Parameter, berechnen. Aber der Anfang ist sicher am einfachsten wenn du einfach mit bildschirmkoordinaten mit geschwindigkeiten in "pixel pro sekunde" rechnest und einfach jeden partikel als weißen pixel an der entsprechenden stelle auf den bildschirm malst.
Emitter bestehend aus position x,y, erzeugungsrate, initiale lebensdauer, richtung phi und geschwindigkeit v, je nach dem wie detailiert du das machst noch stochastische verteilungen für jeden die parameter (zB den winkel um bis zu +-10° verdrehen und die initiale lebensdauer verkürzen je mehr der winkel abweicht gibt dir so ne art raketen-düse)
die welt kannst du dir dann überlegen ob du sie mit einfach gravitation "im bildschirm nach unten" machst, oder zirkulär "gravitation zur bildschirmmitte", oder mehrere gravitationszentren. Letztendlich irgendeine funktion g die dir an der position (x,y) beschleunigungen in x- und y-richtung gibt. (das ist natürlich nicht wirklich gravitation wenn man ohne massen rechnet, aber der effekt ist reichlich ähnlich. Man sollte es vermutlich eher wind oder sowas nennen)
und die Simulation besteht dann letztendlich aus ner liste der emitter, ggf durch user-input beeinflussbar und ner liste aus grade existierenden partikeln. Die hauptschleife schaut dann einfach aus welchen emittern wie viele neue partikel in der verganenen zeit dt seit der letzten schleifenausführung entstanden sind, schaut bei den partikeln welche "gestorben" sind. Und dann stellst du dir eben ne Differentialgleichung für die bewegung auf, sowas in der richtung
x_neu := x_alt + vx_alt*dt + 0.5*ax(x_alt,y_alt)*dt*dt
y_neu := y_alt + vy_alt*dt + 0.5*ay(x_alt,y_alt)*dt*dt
vx_neu := vx_alt + ax(x_alt,y_alt)*dt*dt
vy_neu := vy_alt + ay(x_alt,y_alt)*dt*dt
(und für die lebensdauer halt noch t_neu := t_alt - dt oder +dt je nach dem wie du damit rechnen willst)
mal als primitivste Integration nach dem Euler-Verfahren mit bewegungsgleichungen basierend auf Newtonscher Mechanik. Das wertest du dann in jedem schleifendurchlauf aus für alle partikel und schon fliegen die teile übern bildschirm.
Damit das ganze dann nicht so langweilig nur zum anschauen ist wirst du vermutlich die Emitter-parameter wie position und richtung irgendwie durch nutzer steuerbar machen, dass man zB eine mit der maus drehbare und der tastatur verschiebbare raketendüse bekommt.
Dann kannst du wenn du willst anfangen dir feuerwerke zu bauen, indem partikel selbst emitter sein könn, oder du kannst weitere normale phsyikalische effekte einbauen wie partikeln ladung verpassen und dann kräfte zwischen partikeln (achtung, laufzeitkomplexität) einzuführen oder mit magneten zusätzlich zu der gravitation die bewegungen ortsabhängig beeinflussen zu können, oder du kannst dich in numerische integration einlesen und genauere verfahren als das oben erwähnte euler-verfahren einbauen, oder oder oder. Viel zur Auswahl
Fußnote: Warum gibts hier eigentlich keinen TeX support? JSMath oder sowas wär echt praktisch manchmal.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
schildron
Anmeldungsdatum: 25.08.2008 Beiträge: 86
|
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
|
Nach oben |
|
 |
0oFreako0
Anmeldungsdatum: 17.12.2011 Beiträge: 114
|
Verfasst am: 18.12.2011, 20:46 Titel: |
|
|
Thx an euch werd mir das mal genauer anschauen. |
|
Nach oben |
|
 |
|