wollte eigentlich vermeiden hier nachzufragen da ich selber drauf kommen wollte, aber leider bekomme ich das ganze nicht hin.
Also ich habe ein Objekt das ich an der X Achse mit der Maus verschieben möchte. Hier im Forum habe ich gelesen das man die Typen umbedingt einhalten muss. Das habe ich auch schon festtellen können.
Eigentlich ganz leicht, mehr oder weniger . Habe die Cam.z auf -30 stehen und in der Diff.x steht 0.001. Verschieben geht zwar aber halt nicht da wo die Maus ist.....
Registriert: Mi Apr 13, 2011 22:05 Beiträge: 218
Programmiersprache: Lazarus/FPC
Oah, willkommen bei einem der größten Probleme in 3D (zumindest bei mir so) Ich hab da ewig rumgesch*** bis ich auf eine graden Zweig gekommen bin, aber alles der Reihe nach:
Hier mal eine einfache Funktion die die X-Y-Position der Maus in 3D-Koordinaten der aktuellen Szene rechnet. Das Ergebnis ist ein GLFloat-Array mit den 3 Koordinatenzahlen. Du musst halt schaun das das aufgerufen wird NACHDEM du die Kameraposition schon gesetzt hast damit OpenGL weiß was wo ist.
gluProject(x, y, Z, modelview, projection, viewport, @result[0], @result[1],
@result[2]);
end;
Und fürs Verschieben der Objekte: Da würd ich das mit den in-3D-Koordinaten-berechnen nur nehmen wenn du ein Objekt im Grund, Auf oder Kreuzriss verschiebst!!!! Wenn du zum Beispiel von oben auf das Objekt schaust, es verschiebst dann stimmt zwar die links-rechts-Position unter der Maus aber die Höhe auf der das Objekt liegt sucht sich OpenGL oft beliebig dann raus und plötzlich liegt dein Würfel auf -200 oder so^^ Da kannst du dir dann das berechnen der Höhenkoordinate sparen!
Nur da würd ich dieses Verfahren benutzen, und halt immer nur für die 2 jeweils benutzten Koordinaten, xy xz oder yz. Beim freien Draufschaun auf das Objekt hab ich mir eine Funktion geschrieben die quasi eine Linie erstellt die parallell zur Kamera liegt und durch das Objekt geht, auf der wird dann das Objekt verschoben, sowohl nach oben als auch nach links-rechts^^. Aber den code dafür poste ich nur nach Anfrage weil der doch etwas Platz einnimmt^^
lg IDA
_________________ Ich teile manchmal heimlich durch Null. - Alber Einstein
1) Von den Screen-Space Koordinaten der Maus (von letztem Zeitintervall Mn und diesem Mm) hole dir dir 3D-Positionen in der Welt (wie in den Posts oben beschrieben) Letzte 3D-Position: Pn, neue: Pm 2) Aus der vorherigen 3D-Mausposition Pn berechne die Ebene auf der du das Objekt bewegen willst (Die Ebene geht durch diesen Punkt), z.B auf Untergrund entlang 3) Hole dir die Rays von den Screen-Space Mauspositionen zu Pn und Pm, von der Kamera aus gesehen: Rn und Rm. Das geht indem du mit gluUnProject die Positionen an Mn/Mm auf der Near/Far Plane holst 4) Schneide Rn und Rm mit der Ebene die du ausgerechnet hast, das ergibt die Schnittpunkte Sn und Sm 5) Neue Position des Objekts: Alte Position + (Sn - Sm)
Das funktioniert bei mir wunderbar. Ich benutze es in einem Editor um Objekte mit der Maus zu verschieben (und in abgewandelter Art, zu rotieren).
Mitglieder in diesem Forum: 0 Mitglieder und 12 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.