Ich hatte gerade folgende Idee:
Um die Kamera zu rotieren verwende ich ein naives Maus-Drag System. Nun möchte ich, dass die Rotation so ansetzt, dass man den Punkt den man angeklickt hat, auch "festhält".
Meine Idee war nun, den Pixel aus dem Depthbuffer zu ermitteln, auf dem die Maus liegt und anhand dieses Pixels die Rotation zu skalieren.
Kann das so funktionieren? Wenn ja, wie setze ich das geschickt um?
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
mit mathematik.
nein spaß bei seite! Du kannst mittels glReadPixels die Tiefe des Puntkes auslesen, die du angeklickt hast und speicherst deine Fenster Koordinaten ab. Verändert sich die Mausposition während du die linke (oder rechte) Maustaste gedrückt hast, ermittelst du per unproject die Raumkoordinaten beider Mauspositionen im Viewspace. In jedem Frame vergleichst du die Raumkoordinaten jedesmal mit den alten (normieren der vektoren nicht vergesen!) und errechnest die Winkel zwischen den beiden Vektoren. Das sollte es gewesen sein mit der mathematik. anschließend dreht man dann die Szene um die ermittelten Winkel auf den entsprechenden Achsen und dann sollte es gehen.
Es kann aber sein, dass es etwas ruckelt, weil man die Maus ja nur um ganze Pixel verschieben kann und dadurch evtl. einige Ruckler in der Rotation entstehen können. Ich hab mir dafür nen Mousebuffer entworfen, der je nach fps ne bestimmte anzahl an Mauscoords einliest und je nachdem wie aktuell eine Koordinate ist eine höhere Gewichtung gibt, bis man auf eine 100% Gewichtung für alle Mausdaten kommt. Wählt man wenige Werte, dann ist die Kamerabewegung einfach nur weich. Wählt man hingegen viel mehr, dann kommt die Kamera langsam in fahrt und braucht auch etwas zum abbremsen. Meiner Meinung nach ein cooler Effekt, den man auch benutzen kann um das Gewicht eines Gegenstandes zu simulieren, den der Betrachter in der Hand halten könnte (ich denke hierbei nicht an blutrünstige Waffen ).
Danke, mir gings nur darum, ob die idee effizient genug ist, bzw obs funktioniert. Die einzige Alternative die mir einfiele, wäre einen "echten" Strahl gegen die Objekte zu testen und das frisst natürlich CPU. Naja ich denke die Frage nach der Funktionalität damit geklärt
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
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.