Es geht um eine kleine Partikel Engine, die ich schreibe, ich habe das ganze schonmal in 2D gemacht, in 3D wird das ganze jetzt nochmal ein wenig komplizierter Mein Partikel Emitter ist ein Quadrat welches eine Position und eine Ausrichtung (zwei winkel) hat. Jetzt möchte ich zunächst einen zufälligen punkt in diesem Quadrat bestimmen.
Des weiteren gibt es einen Winkel der angibt, in welche Richtungen Partikel austreten. (Man könnte es als Streuung ansehen) 0° bedeutet alle Partikel fliegen parallel und 360° bedeutet eine Kreisförmige Emission, wobei alle Zwischenstadien (die ja so etwas wie die form eines kegels haben) senkrecht zur Oberfläche des Quadrates stehen sollen.
prinzipiell erzeuge ich die zufallspunkte im nicht gedrehten quadrat und drehe dann diese punkte, nur stehe ich gerade da etwas auf dem schlauch
Wobei randomValue1 und randomValue2 einen (unterschiedlichen) Zufallswert zwischen 0 und 1 haben.
Statt mit einer Winkelangabe wuerde ich einen Punkt hinter dem Quadrat platzieren. Nun berechnest du einfach den Vektor von diesem Punkt zu dem ermittelten Punkt im Viereck und teilst ihn durch seine Laenge um ihn die Laenge 1 zu geben.
Ist der Punkt sehr nahe an der Ebene, wirkt es so als ob sich die Partikel Kugelfoermig entfernen. Ist der Punkt sehr weit weg, wirkt es so als ob die Partikel senkrecht vom Viereck wegbewegen.
Dateianhänge:
Dateikommentar: Man kann zum Beispiel einen Punkt hinter dem Viereck zu Berechnung des Austrittwinkels berechnen. PartikelAusViereck.png [ 7.98 KiB | 5493-mal betrachtet ] Dateikommentar: Punkte in einem Viereck, koennen mit hilfe von Vektoren erreicht werden. PunkteImViereck.png [ 19.05 KiB | 5496-mal betrachtet ]
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
das mit dem Quadrat (Rechteck) als Vektoren ist eine gute idee, so werde ich das machen.
das mit der Richtung macht auch Sinn (sofern ich das richtig verstanden habe).
Angenommen dies sei das Quadrat:
Code:
|------------------|
| |
| X |
|------------------|
wenn X der zufallspunkt ist und sich der andere punkt in der mitte befindet gibt es ja zwei möglichkeiten. entweder habe ich den Punkt hinter der Fläche und den vektor zum X hin, dann würde sich das partikel nach links bewegen. habe ich den punkt vor der fläche und vom X zum punkt würde sich das partikel nach rechts bewegen, richtig ? keine schlechte idee, ist es denn so, wenn der punkt auf der fläche liegt, dass die Partikel einen Kreis beschreiben ? (ich bräuchte aber eine kugelförmige Emission, also müsste ich als Emitter einen Würfel nehmen, dann hätte ich alle Möglichkeiten) ist das nicht etwas ungenau ? den punkt kann ich ja durch den abstand zum rechteck definieren (also über die flächennormale)
Mit einem Würfel als Basis wäre das allerdings wieder schwieriger.
Ein Würfel [bzw Quader] (Axis aligned) und einen Punkt (wie du bereits sagtest). Der Würfel wird dann durch zwei Vektoren beschrieben. Das Zufallsgenerieren ist dann ja kein Problem. Die Größe des Würfels kann ich somit auch so verändern, dass ich ein Rechteck oder einen Punkt habe. wenn der Zielpunkt in der Mitte ist, habe ich eine Kreisförmige Emission (bei einem Würfel) Um parallele Partikel zu erreichen, muss ich mir noch etwas überlegen.
Meines erachtens so:
Code:
with position do
begin
x := FPosition.x+ FSize.x*(random(201)/100-1);
y := FPosition.y+ FSize.y*(random(201)/100-1);
z := FPosition.z+ FSize.z*(random(201)/100-1);
end;
direction := v3f_normalize(v3f_sub(FAPoint, position));
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.