Ich habe ein Problem mit einer Kugeldrehung per Maus. Ich verwende dabei GLScene, jedoch kann man vielleicht die selbe Lösung in OpenGL auf GLScene anwenden. Ich möchte, dass ,wenn ich mit einem rechten Mausklick eine Kugel drehen möchte, diese an der Kugel kleben bleibt. Momentan erhöhe ich den Wert (TurnAngle,RotationAngle) jeweils um 1 bei jeder Bewegung in X,bzw y Richtung. In GLScene verwende ich dafür die Prozedur GLCamera1.RotateObject. Das sieht dann so aus
wobei FMousePos die alte Position der Maus ist und FiMy/FiMx die neue Mausposition ist.
Desweiteren würde ich der Kugel eine art Spin mitgeben. Sprich, sobald der MouseUp Event ausgelöst wird dreht die Kugel sich noch, je nachdem wie doll man gedreht hatte weiter. Vielleicht kann mir jemand einen kleinen Tip geben wie so etwas zu realisieren wäre.
Also unter Windows benutze ich immer GetCursorPos und SetCursorPos. Dann wird, wenn man die rechte Maus drückt, die Position erstmal auf einen vordefinierten Punkt gesetzt. Man könnte auch noch den Cursor verstecken. Danach wird dann in jedem Frame die Position mit GetCursorPos ermittelt und der Cursor wieder auf den festgelegten Punkt wie am Anfang gesetzt. Die Differenz wird dann logischerweise in die Rotation umgesetzt. Das setzen auf eine feste Position verhindert das der Cursor an den Bildschirmrand stößt. Entsprechend sollte die Position auch in der Mitte des Fensters oder Bildschirms gewählt sein.
Das mit dem Spin ist ein bischen komplizierter. Ich denke mal die letzte Differenz zu speichern bringt nicht so viel, wenn man sehr viele FPS hat.
Also am genauesten wäre es denke ich wenn man einen Zeitraum festlegt, z.B. eine halbe Sekunde. Wenn man die Maustaste loslässt wird der "Spin" aus der Summe der Differenzen der Positionen vom Zeitpunkt des Loslassens bis eine halbe Sekunde vorher errechnet. Der Nachteil ist natürlich das man in jedem Frame (in dem sich die Position geändert hat) die Änderung und die Zeit speichern muss. Gettickcount reicht für die Zeit vielleicht schon aus (ist nur auf 15-16ms genau).
Mitglieder in diesem Forum: 0 Mitglieder und 22 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.