Mausbewegung in 3D
lima-city → Forum → Programmiersprachen → C/C++ und D
abfrage
achse
ansatz
bewegung
code
cursor
dimension
ermitteln
fenster
frage
glut
hilfe
kamera
maus
point
position
relative bewegung
sechs
vier
windows
-
Ich tüftel gerade an einem kleinem Codesegment für die Mausbewegung in 3 Dimensionen. Die Engine steht und möchte sechs Werte für die Kamera haben - drei Koordinaten (x, y, z) und drei Winkel (für jede Achse einen). Bei letzterem habe ich das Problem, dass ich diese mit der Maus ermitteln muss. Bis jetzt habe ich das so gelöst:
POINT maus; LONG mx = 0; LONG my = 0; // [...] mx = maus.x; my = maus.y; GetCursorPos(&maus); kameraWx = float(kameraWx - (mx - maus.x) * 0.1); kameraWy = float(kameraWy - (my - maus.y) * 0.1);
Das funktioniert auch schon sehr schön. Dennoch folgen daraus 2 wesentliche Probleme:
1. Man kann die Maus nicht unendlich weit in eine Richtung bewegen, soll man aber können
2. Wenn man das Fenster verschiebt, wird das als normale Mausbewegung registriert und verschiebt somit auch die Ansicht
Ich weiß, dass ich zumindest für Punkt 1 einen neuen Ansatz brauche, aber welchen sollte ich nehmen? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
toolz schrieb:
Ich tüftel gerade an einem kleinem Codesegment für die Mausbewegung in 3 Dimensionen.
Hilfreich zuwissen wäre noch:
1. Was für ein Betriebsystem? (Nehme Windows an)
2. Was für Libraries? (Nehme DirectX an)
3. Wo du diese Abfrage einbaust? (Nehme WM_INPUT Message an)
4. Verstehst du Englisch? (Nehme Ja an) :)
In DirectX empfiehlt Microsoft nicht DirectInput für die Maus zu verwenden, sondern RawInput.
Hilfreiche Seit für DirectX - Spezifisch RawInput (Englisch!!):
http://www.toymaker.info/Games/html/raw_input.html
Ansonsten sollte die Google auch eine gute Hilfe sein!
mfg KlasseT -
Du verfehlst leider in allen vier Fragen...
1. Ich möchte für Windows und Linux programmieren
2. Ich nutze deshalb OpenGL
3. habe die Abfrage mal bei WM_INPUT stehen gehabt, allerdings wurde sie da nur aufgrufen, wenn man die Maus im Fenster bewegt, also ist sie jetzt in der Programmschleife
4. Und ich möchte keine englischen Hilfestellungen
Also ich habe das Ganze jetzt mal bei Spielen beobachtet - Da ist das meistens so gelöst, dass die Maus verschwindet, sobald das Spiel aktiv ist, also im Fenstermodus ist auch keine mehr zu sehen. Nur wenn man z.B. mit ALT + TAB den Task wechselt, wird sie wieder sichtbar. Das würde ich gerne nachprogrammieren. Wo muss ich da ansetzen? In der Grafikschnittstelle oder bei den Fenstereigenschaften? -
toolz schrieb:
Du verfehlst leider in allen vier Fragen...
Haha lol...
Naja mit OpenGL kenn ich mich zu wenig aus.
sektor schrieb: Wie setzt du dein Fenster auf? Mit GLUT?
Das wäre bestimmt noch praktisch zu wissen.
Also Lösungsansatz wie es in Spielen normal umgesetzt wird, verschwindet wie du gesagt hast der Mauszeiger (natürlich ist die Maus noch da nur kann man sie nicht sehen)
Danach wird normalerweise der cursor in dr mitte gehalten und no die relative Bewegung, also die Bewegung, welche die Maus innerhalb einer Spielschleifendurchlauf o.ä. zurückgelegt hat, relativ zum Mittelpunkt, genommen.
Mit Hilfe dieser Daten wird dann die Bewegung des Blickfeldes (bei einem Ego-Shooter) berechnet.
Was nun offen steht, ist was genau du mit dem Mauszeiger machen willst, vielleicht gibt es eine spezifische Lösung für deine Anwendung.
Wenn du die Position der Maus willst, dann funktioniert dies sicher mit einem "Hook", jedoch ist dies dann bereits "overkill" (übertrieben)...
mfg KlasseT -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage