Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Hi @ll
Der Titel ist vielleicht etwas ungenau, aber was besseres ist mir nicht eingefallen.
Ich schreibe momentan an einem Programm (später dann Spiel) wo erstmal eine Weltkarte zu sehen sein soll. Dort kann man reinzoomen. Jetzt würde ich aber gerne wissen, wie ich das so mache, dass beim Zoomen das Bild so verschoben wird, dass man die Position wo der Cursor hingezeigt hat als neues Zentrum hat. (hoffentlich war das jetzt verständlich)
Hier noch ein paar Codeschnipsel:
Dieses gewirr von CurrentZoom und ZoomLevel hab ich für einen fließenderen Übergang eingebaut.
Gruß Lord Horazont[/pascal]
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Du brauchst erstmal den punkt des cursors in der opengl welt.
Den kannst du z.B. durch Raycast Intersection(Linien-Ebenen kollision) bekommen, es gibt aber auch OpenGL basierte Möglichkeiten.
Wenn du den Punkt hast, kannst du dann über eine Funktion egal ob Linear,Sinus,Kubisch oder was es noch alles gibt die Animationspunkte zwischen Startpunkt und Endpunkt berechnen. Wenn ich es recht gesehen hab nutzt du eine Lineare gleichung.
Zu dem Thema könntest du bei Nehe fündig werden.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Diese Position bekommst du, indem du mittels glUnProject die 3D-Koordinaten des 2D-Cursors berechnest. Dadurch erhältst du den 3D-Punkt zurück, auf den der Cursor gerade zeigt.
Dadurch kannst du dann deine neue Kamera-Position berechnen. Da es ja ne Kugel ist, würde ich einfach den Vektor vom Kugelmittelpunkt zu diesem anvisierten Punkt nehmen und verlängern. Dorthin bewegst du dann die Kamera. (Ich hoffe, ich muss hier nicht erwähnen, dass es in OpenGL keine Kamera gibt *g*). Nen fließenden Übergang kannst du ganz easy mit linearer Interpolation oder mit Kosinus-Interpolation erzeugen.
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Öhhmm... Das ganze ist in einer 2D welt, womit ich mir (rein theoretisch) das UnProjecten sparen kann...
So ganz kapiert hab ich das jetzt sowieso nicht, also bitte etwas genauer... (bin heute schwer von begriff)
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
TAK2004 hat geschrieben:
Du brauchst erstmal den punkt des cursors in der opengl welt.
Ist für dich die wichtigste Aussage. Wenn du den Punkt hast, was ja bei 2D wie du schon gesagt hast sehr leicht ist.
Dann berechnest du dir den Vektor der den alten Punkt mit den neuem verbindet. Den spaltest du am besten in Zoom und Bewegung auf.
Dann suchst du dir einfach ein Verfahren wie du diese Bewegung möglichst glatt vonstatten gehen lässt.
Das einfachste wäre hier ne lineare Funktion, so dass du für x Sekunden immer y zum alten Punkt hinzuaddierst, sodass dies dein neuer ist.
Mitglieder in diesem Forum: 0 Mitglieder und 9 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.