Wenn Sie nur einen Vektor auf einem Winkel auf Basis gedreht werden soll, nur eine einfache Drehung von Werten auf der angegebenen Ebene durchführen, sich für eine Rotation auf der XZ-Ebene trig as per this page zB mit:
var x = cos(theta)*vec_to_rotate.x - sin(theta)*vec_to_rotate.z;
var z = sin(theta)*vec_to_rotate.x + cos(theta)*vec_to_rotate.z;
rotated_vector = new THREE.Vector3(x,vec_to_rotate.y,z);
Aber bewege Partikel mit Wind, du drehst nicht wirklich einen Vektor, du solltest einen Geschwindigkeitsvektor hinzufügen, und er "dreht" seinen eigenen Kurs basierend auf einer Kombination aus Anfangsgeschwindigkeit, Trägheit, Luftreibung und zusätzlichen konkurrierenden Kräften a la:
init(){
position = new THREE.Vector(0,0,0);
velocity = new THREE.Vector3(1,0,0);
wind_vector = new THREE.Vector3(0,0,1);
}
update(){
velocity.add(wind_vector);
position.add(velocity);
velocity.multiplyScalar(.95);
}
Dies Das Modell ist wahrer, wie der Wind ein Teilchen beeinflusst. Dieses Teilchen wird entlang der x-Achse beginnen und dann "drehen", um schließlich in die Richtung des Windes zu gehen, ohne irgendeine Drehung der Vektoren. Es hat eine Masse und eine Geschwindigkeit in einer Richtung, eine Kraft wirkt darauf, es wendet sich.
Sie können sehen, dass, weil die ganze Geschwindigkeit Reibung unterliegt (die multscalar), unsere Anfangsgeschwindigkeit nimmt ab, wenn der Windvektor akkumuliert, was eine wiederum bewirkt, ohne Drehungen ausführen. Dachte, ich würde das rausschmeißen, nur für den Fall, dass Sie mit Partikelsystemen nicht vertraut sind und vielleicht nur falsch darüber nachgedacht haben.
Ich habe wirklich keine Zeit, um in diese zu tauchen, aber es klingt ähnlich zu etwas, das ich [hier] beantwortet habe (http://stackoverflow.com/questions/43469555/three-js-particles-orbiting-a-point- in-random-direction-forming-a-sphere/43481278 # 43481278) vorher (siehe auch Kommentare zu Arbeitsbeispielen). Du könntest das wahrscheinlich mit Quaternionen machen, aber ich denke Vector3.ApplyAxisAngle (Achse, Winkel) wird gut funktionieren. – micnil