Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 13:14

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Jul 29, 2009 12:31 
Offline
DGL Member

Registriert: Fr Jan 16, 2009 13:36
Beiträge: 75
Hallo,

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

Code:
  1.  FGLcameraUsed.RotateObject(GLMultiProxyContainer,(FMousePos.Y-Fimy),(FMousePos.X-Fimx));
  2.  

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.

Vielen Dank,

heavenssake007


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jul 29, 2009 15:18 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
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).


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.006s | 14 Queries | GZIP : On ]