Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 09, 2025 20:34

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: ParticleEngine (namenlos)
BeitragVerfasst: So Sep 24, 2006 20:42 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Tja namen sind meiner Meinung nach nebensaechlich. Da ich keine Marketingkampange anheizen muss, kann sowas am ende kommen. Nun gehts mir aber erstmal um weitere Ideen für die Engine. Die Engine ist durch das Tut entstanden und wurde dann soweit ich Ideen hatte, erweitert:
http://shaddow89.sh.funpic.de/particle.zip

Ist alles drin, auch ne Demoexe.

So könnte eine Feuerinitalisierung aussehen:
Code:
  1.   Fire := TEffekt.Create('Feuer',1600,1000,20,10,'fire.tga');
  2.   Fire.SetStartPosition(-0.5,0,0);
  3.   Fire.SetColor(1,0.7,0.25,TRUE,FALSE,FALSE);
  4.   Fire.SetPosition(20,5,5,0.1,0,0);
  5.   Fire.SetParticlePosition(10,5,-0.05,0);
  6.   Fire.SetGeschwindigkeit(80,150,40,-0.3,0.2,-0.2);
  7.   Fire.SetParticleGeschwindigkeit(4,6,-0.02,0.03);
  8.   Fire.SetTextureSize(CreateVector(0.07,-0.07,0),CreateVector(-0.07,-0.07,0),CreateVector(-0.07,0.07,0),CreateVector(0.07,0.07,0));
  9.  



Aber nun hoffe ich von euch auf mehr Ideen für die Engine. VIelleicht auch eine Anregung, wie ich möglichst effektiv Kreisförmige ParticleEffekte erzeuge. Also funktionstechnisch bekomme ich das schon hin, aber wie die Aufrufe dafuer am elegantesten wären, meine ich.

Aber natuerlich freue ich mich über jegliche Art anregung, was ihr schon alles so realisiert habt.

Danke schonma
Shaddow


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 25, 2006 08:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Code:
  1. Fire.SetGeschwindigkeit(80,150,40,-0.3,0.2,-0.2);
  2. Fire.SetParticleGeschwindigkeit(4,6,-0.02,0.03);

Du meinst das doch wohl eher so, oder?
Code:
  1. Fire.SetSpeed(80,150,40,-0.3,0.2,-0.2);
  2. Fire.SetParticleSpeed(4,6,-0.02,0.03);

Alle Englischsprachigen Programmierer werden mit Geschwindigkeit nicht viel anfangen können. Von daher würde ich Benamung komplett in Englisch gestalten.

Sonst würde mir nur noch einfallen, dass du die Größe der Partikel und evtl eine Drehung einbaust. Also, dass die Partikel zu Begin unterschieliche Größen haben und dann evtl auch ihre größe im laufe der Zeit verändert. Bzw das ganze auch noch mit einer Drehung. Dann wirkt es nicht so gleichmäßig sondern schon zufälliger.

Sonst aber schon recht nett.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 27, 2006 12:26 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Jo durch Zufall habe ich die GrößenÄnderung bereits eingebaut ;)
Aber das mit Drehung is ne gute Idee, das versuch ich noch.

Und das verenglischen natuerlich auch ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 27, 2006 13:09 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Meine Frage dazu gleich ma: Bisher habe ich eine mehr oder weniger geradlinige Bewegung der Partcle simuliert (die abweichungen kommen durch die Randomfunktionen)
allerdings würde ich auch gerne die möglichkeit einer Wellenlinie oder eines Kreisbogens etc geben.
Am liebsten wäre es mir, dass ich eine Funktion ala:
Fire.SetMovement ('sin x'); oder irgendwie sowas, dass per Funktion die Bewegung berechnet wird.
Ka ob das ueberhaupt so möglich ist, aber irgendwie müssen komplexere Particlengines ja auch kompliziertere Bahnen simulieren können. also hat wer ne Ahnung wie das geht?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 27, 2006 13:45 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Die komplexeren Partikelsysteme arbeiten mit handfesten Physiksimulationen/Kolisionen zusammen. Solche Wellenlinien oder auch Schlingern habe ich allerdings bisher noch nicht groß gesehen. Dafür bin ich aber die falsche Adresse.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 27, 2006 14:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
Ob du mit sowas wie "Fire.SetMovement ('sin x');" weit kommst bezweifle ich, zumal die implementierung davon sicherlich auch nicht einfach wird und es am Ende auch recht limitierend wird.
Ein Möglichkeit wäre die implementierung einer Script funktion. (z.b. mittels TJvInterpreterProgram von JVCL).
D.h. du machst es möglich das die gesammte Bewegung von einem script gesteuert wird. Kann aber durchaus sein das das bei vielen Partikeln und damit vielen Aufrufen stark auf die Performance geht.

Ich würde erstmal eine einfache Gravitations Engine einbauen.
Praktisch das du für deine Effekte Graviationspunkte mit stärke und eventuell auch richtung einstellen kannst.
Sowas wie Fire.AddGravityPoint(x,y,z,stregth : double; ax,ay,az : boolean); (ax = affect x coordinate,...).
Eventuell auch noch mehr parameter um die stärke in abhängigkeit vom Abstand einstellbar zu machen.
Damit lassen sich aber bestimmten sehr nette Effekte erstellen :)
Die Effekte hängen dann nicht von irgendwelchen vorgefertigten Funktionen ab sondern nur von den Parametern der Graviationspunkte und besonders von den Anfangsgeschwindigkeiten und Richtungen der Partikel.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 27, 2006 16:08 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Ja die Geschichte mit den Gravitationspunkten is auch ne nette Idee und werd ich mal versuchen, allerdings:
Das hier ist die Berechnung des Containers, der Schablone für alle Particle dieses Containers also:
Code:
  1.         Position.X        := Random(EmissionPosition.X)/100+EmissionPosition.DivX;
  2.         Position.Y        := Random(EmissionPosition.Y)/100+EmissionPosition.DivX;
  3.         Position.Z        := Random(EmissionPosition.Z)/100+EmissionPosition.DivX;
  4.         if EmissionGeschwindigkeit.X <0 then
  5.           Geschwindigkeit.X := -Random(EmissionGeschwindigkeit.X*(-1))/100+EmissionGeschwindigkeit.DivX
  6.         else
  7.           Geschwindigkeit.X := Random(EmissionGeschwindigkeit.X)/100+EmissionGeschwindigkeit.DivX;
  8.  
  9.         if EmissionGeschwindigkeit.Y <0 then
  10.           Geschwindigkeit.Y := -Random(EmissionGeschwindigkeit.Y*(-1))/100+EmissionGeschwindigkeit.DivY
  11.         else
  12.           Geschwindigkeit.Y := Random(EmissionGeschwindigkeit.Y)/100+EmissionGeschwindigkeit.DivY;
  13.  
  14.         if EmissionGeschwindigkeit.Z <0 then
  15.           Geschwindigkeit.Z := -Random(EmissionGeschwindigkeit.Z*(-1))/100+EmissionGeschwindigkeit.DivZ
  16.         else
  17.           Geschwindigkeit.Z := Random(EmissionGeschwindigkeit.Z)/100+EmissionGeschwindigkeit.DivZ;
  18.  

Und das hier ist die Spezifikation der einzelnen Particel selbst, sodass nich alle gleich aussehen
Code:
  1.  
  2.  
  3.         Position.X        := Position.X        + Random(EmissionParticlePosition.X)/100+EmissionParticlePosition.DivX;
  4.         Position.Y        := Position.Y        + Random(EmissionParticlePosition.Y)/100+EmissionParticlePosition.DivY;
  5.  
  6.         if EmissionParticleGeschwindigkeit.X < 0 then
  7.           Geschwindigkeit.X := Geschwindigkeit.X + -Random(EmissionParticleGeschwindigkeit.X*(-1))/100+EmissionParticleGeschwindigkeit.DivX
  8.         else
  9.           Geschwindigkeit.X := Geschwindigkeit.X + Random(EmissionParticleGeschwindigkeit.X)/100+EmissionParticleGeschwindigkeit.DivX;
  10.  
  11.         if EmissionParticleGeschwindigkeit.Y < 0 then
  12.           Geschwindigkeit.Y := Geschwindigkeit.Y + -Random(EmissionParticleGeschwindigkeit.Y*(-1))/100+EmissionParticleGeschwindigkeit.DivY
  13.         else
  14.           Geschwindigkeit.Y := Geschwindigkeit.Y + Random(EmissionParticleGeschwindigkeit.Y)/100+EmissionParticleGeschwindigkeit.DivY;
  15.  
  16.  


Wenn ich da jetz noch die Gravitypoints mit einberechne, müsste ja jeweils bei den Geschwindigkeiten dieser Parameter abgezogen werden (oder so in der art), aber dadurch wird die berechnung ja immer komplexer. Deswegen würde ich gerne wissen, ob das so, wie ich das hier berechne wirklich sinn macht, oder ob ich nich eigentlich einen völlig falschen feldweg gehe, der immer komplexer wird, während eine schnellstraße nebenher geht ^^

Also bitte ich um Antwort auf dieses Problem
UND:

In wiefern bringt mir der Interpreter etwas? Ich muss ja an sich die Interpretation nur einmal aufrufen, sodass das Script einmal geparsed wird, und das programm sich dann merkt, wie die bewegung zu berechnen ist (wie auch immer das geht ^^), dann würde es ja eigentlich ziemlich schnell gehen. Geht das? wenn ja, gibs dazu Zaunpfahlwinker, Tuts oder oder oder? :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 27, 2006 18:49 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
Ich habe keine Ahnung was bei dir nun Container sind oder was der Code da soll ;)

Aber die Berechnung mit Gravitation sollte nicht so wahnsinnig mehr kompliziert werden. Es wirkt halt die ganze Zeit die Gravitationskraft auf deine Punkte. Hast du mehrere Gravitationspunkte gilt Superposition der Kräfte, also einfach Addition. Aus allen Kräften folgt damit direkt die auf die Partikel wirkende beschleunigung. Die rechest du einfach für jeden Partikel die beschleunigung als Vektor für die aktuelle Position aus und haust es in deine Bewegungsgleichung mit rein :)

Mit dem Script und dem Interpreter müßte imo so laufen das du das script für jeden Partikel und jedes Update(also praktisch OnTimer) aufrust.
Und soweit ich weiß funktioniert JvInterpreter so das er es auch jedesmal parsen tut. Also für ne Partikelengine wohl zu langsam. Hab mich aber auch noch nicht sooo intensiv damit beschäftigt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 27, 2006 21:47 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Ja gut wie ich das mit den Gravitypoints hinkrieg, haet ich mir nun schon denken können ^^

Naja mal sehen, vllt meldet sich ja noch wer, der schon ne große Particleengine geschrieben hat, und sagt mir, wie er das gemacht hat, mit der flexiblen bewegungsberechnung *zu kyro schiel*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 28, 2006 14:34 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
du kannst objekte wie reflektoren, attraktoren und gravitationsfelder einbauen. du kannst zufall einbauen, du kannst einbauen, dass man den streuungswinkel wählen kann, und und und...

guck dir mal die particle engine der unreal engine 3 an, http://www.unrealtechnology.com/screens/cascade_new.jpg

da geht ne menge ;)

so, ich hab hier mal meine engine zusammengepackt, kannst dir ja mal angucken:

http://www.exec-dev.de/include/downs/do ... 2d_07b.zip

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 28, 2006 20:42 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
So Kreis- und Spiralbewegungen gehen nun. Das nächste wird dann Gravitypoints und Interpolationen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 30, 2006 07:54 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Ja momentan arbeite ich etwas mit Seth zusammen^^ selbe projekte schreien doch gerade zu nach gegenseitiger hilfe ;)

Nun habe ich mal auch von meiner engine eine einfache demo gebastelt: http://shaddow89.sh.funpic.de/Feuer.zip


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.015s | 15 Queries | GZIP : On ]