Guten Tag,
ich habe einige Körper in meiner Szene und möchte die Geschwindigkeitsvektoren als Zylinder oder Linien anzeigen lassen.
Beispiel Geschwindigkeitsvektor: (1.5, 2.7, 0), ein fallender Körper der sich außerdem in X-Richtung bewegt.
Mein bisheriger Lösungsversuch (besser noch viele gescheiterte Lösungsversuche) haben nicht zum Ziel geführt. Mein aktueller Stand ist folgender:
Dieser Teil wird jedes Frame ausgeführt:
Das Verschieben und Skalieren funktioniert alles tadellos, nur der Punkt setRotation erfüllt seine Aufgabe nicht...
setRotation sieht wie folgt aus:
Der Zylinder dreht sich zwar um den Körper herum, das allerdings sehr chaotisch und alles andere als logisch...
Erkennt jemand einen Denkfehler? Bin nämlich bereits echt am Verzweifeln...
Schonmal vielen vielen Dank,
Peter Pils
ich habe einige Körper in meiner Szene und möchte die Geschwindigkeitsvektoren als Zylinder oder Linien anzeigen lassen.
Beispiel Geschwindigkeitsvektor: (1.5, 2.7, 0), ein fallender Körper der sich außerdem in X-Richtung bewegt.
Mein bisheriger Lösungsversuch (besser noch viele gescheiterte Lösungsversuche) haben nicht zum Ziel geführt. Mein aktueller Stand ist folgender:
Java:
// Geschwindigkeitsvektor
Vector3d v = new Vector3d(1.5, 2.7, 0);
TransformGroup vectors = body.getVectorGroup();
// Soll den Bewegungsvektor darstellen
Cylinder cylinder1 = new Cylinder();
vectors.addChild(cylinder1);
Dieser Teil wird jedes Frame ausgeführt:
Java:
// -- Bewegungsvektor-Transform3D
Transform3D vecTrans = new Transform3D();
// Entsprechend des Geschwindigkeitsvektors drehen
setRotation(vecTrans, body.v);
// Auf die Position des Körpers verschieben
setTranslation(vecTrans, body.getTransform3D());
// Auf eine passende Größe skalieren
setScale(vecTrans, new Vector3d(0.02, body.v.length() / 20, 0.02));
// Vom Körper "heraus" schieben
translateOriented(vecTrans, new Vector3d(0, 2.4, 0));
// vecTrans übernehmen
body.getVectorGroup().setTransform(vecTrans);
Das Verschieben und Skalieren funktioniert alles tadellos, nur der Punkt setRotation erfüllt seine Aufgabe nicht...
setRotation sieht wie folgt aus:
Java:
// origTransform = vecTrans
// origTuple = body.v
Vector3d copyVector = new Vector3d(origTuple);
// RotationsVektor anhand der Winkelunterschiede bestimmen
Vector3d rotationVector = new Vector3d(
copyVector.angle(new Vector3d(1, 0, 0)),
copyVector.angle(new Vector3d(0, 1, 0)),
copyVector.angle(new Vector3d(0, 0, 1))
);
origTransform.setEuler(targetVector);
Der Zylinder dreht sich zwar um den Körper herum, das allerdings sehr chaotisch und alles andere als logisch...
Erkennt jemand einen Denkfehler? Bin nämlich bereits echt am Verzweifeln...
Schonmal vielen vielen Dank,
Peter Pils