Ich muss Übersetzungs-, Skalierungs- und Rotations-Gizmos implementieren und habe Probleme mit dem Rotations-Gizmo. Grundsätzlich weiß ich nicht, wie ich die Mausbewegung übersetzen soll, um zu bestimmen, in welche Richtung das Objekt gedreht werden soll.
Mit Rotations-Gizmo (Widget) meine ich so etwas wie das Folgende:
Für die Übersetzungs- und Skalierungs-Gizmos, die als 3 Achsen dargestellt werden, mache ich Folgendes: Ich mache einen Vektor aus der Differenz zwischen der vorherigen und der aktuellen Mausposition im Bildschirmbereich. Dann multiplizieren Sie diesen Vektor mit der Umkehrung der Ansichts- und Projektionsmatrizen, was mir einen Vektor der Mausbewegung im Weltraum gibt. Dann nehme ich das Punktprodukt des Vektors im Weltraum mit der ausgewählten Achse. Auf diese Weise kann ich feststellen, ob die Mausbewegung mit der Achse übereinstimmt oder von der Achse entfernt ist.
Aber ich kann nicht dasselbe für das Rotations-Gizmo tun. Das Rotations-Gizmo wird als 3 Kreise dargestellt, die jeweils eine Rotation um eine Achse darstellen. Sobald auf einen Kreis geklickt wird, muss ich eine Möglichkeit finden, die Mausbewegung zu verschieben, um zu bestimmen, in welche Richtung das Objekt um die ausgewählte Achse gedreht werden soll. Ich weiß nicht, wie ich das machen soll. Bitte helfen Sie.
Es ist wichtig zu beachten, dass ich die Farbauswahl und nicht das Raycasting verwende, um festzustellen, wo auf das Gizmo geklickt wurde. Dies bedeutet, dass ich nicht den Punkt habe, an dem der Strahl auf das Gizmo im Weltraum trifft, um anzufangen. Ich erwähne dies, weil ich mir Beispiele angesehen habe, die Raycasting wie libgizmo verwenden, und ich glaube nicht, dass ich das Gleiche tun kann.
Vielen Dank im Voraus für jede Hilfe.