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

Aktuelle Zeit: Fr Jul 18, 2025 07:20

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Bewegungsroutine/Vektoren
BeitragVerfasst: Fr Jul 09, 2010 19:55 
Offline
DGL Member

Registriert: Fr Jul 09, 2010 19:24
Beiträge: 12
Hi, ich bin gerade dabei eine kleine Bewegungsroutine zu basteln. Dabei soll eine Kugel (Sphere) von oben Betrachtet (d.h. die Z-Achse lass ich erst mal aus dem Spiel) sich in Richtung der Mauskoordinaten bewegen. Ich benutze dafür Java (Jogl). Soweit erst mal kein Problem. Jetzt soll allerdings noch ein Wendekreis hinzukommen. Mathematisch gesehen ist das kein Problem allerdings weiß ich einfach nicht wie ich das in opengl umsetze. Mein Denkansatz war (vielleicht lieg ich auch total falsch :) ) das ich zum einen den Vektor vom Ursprung der Kugel zu den Mauskoordinaten brauche und den Vektor der der Y-Achse von der Kugel weg entspricht. Der Winkel zwischen den beiden Vektoren wäre also mein Rotationswinkel. Dann würde ich einfach glRotate vor glTranslate aufrufen und die Kugel nur in Y-Achsen Richtung bewegen. Wie ich allerdings auf die Vektoren komme bleibt mir ein Rätsel :/

viele Grüße

Hot-Chip


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bewegungsroutine/Vektoren
BeitragVerfasst: Fr Jul 09, 2010 21:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Hi, willkommen bei DGL! :)

Mir ist leider nicht ganz klar was du mit "Wendekreis" meinst. Könntest du vielleicht kurz ein Bildchen malen z.B. mit der Kugel, dem Cursor und dem Pfad dem die Kugel jetzt folgen soll.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bewegungsroutine/Vektoren
BeitragVerfasst: So Jul 11, 2010 14:59 
Offline
DGL Member

Registriert: Fr Jul 09, 2010 19:24
Beiträge: 12
So, hab endlich mal die Zeit gefunden eine Skizze dazu anzufertigen. Hoffe der Sachverhalt wird dadurch klarer :)
Wie gesagt, die Mathematik dahinter ist nicht das Problem, sondern wie ich in openGL auf die Vektoren komme bzw. wie man das Problem sonst angehen könnte.

viele Grüße

EDIT: Sehe auch gerade dass das vielleicht besser in das Forum für Einsteiger Fragen passt.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bewegungsroutine/Vektoren
BeitragVerfasst: So Jul 11, 2010 15:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Also bei einer Kugel ist es üblicherweise egal wie diese rotiert ist, da sie von jeder Seite gleich aussieht. Ich vermute aber mal du hast da irgendeine Textur drauf oder so. In jedem Fall hat das Problem meiner Meinung nach mit OpenGL nicht viel zu tun.

Die Kugel hat eine Position kugel.x bzw. kugel.y, sowie eine Rotation dargestellt durch einen Winkel kugel.angle. Rendern kannst du dies in dem du zuerst mit glRotatef entsprechend dem Winkel rotierst und dann anschließend mit glTranslate an die richtige Stelle schiebst.
Es gilt also letztlich nur immer Position und Winkel der Kugel zu aktualisieren. Es gibt da sicher viele Möglichkeiten, aber ich erzähle mal was ich spontan versuchen würde. Im folgenden ist timeElapsed die Zeit in Sekunden die seit dem letzten Frame vergangen ist, also bei 100 fps wäre das 1/100.

Die Kugel bewegt sich in jedem Schritt immer vorwärts. Der Winkel sagt aus wo gerade vorne ist. Den Winkel 0 definiere ich mal als "oben", also in Richtung positiver Y-Achse.
Code:
kugel.x := kugel.x + timeElapsed * speed * sin(kugel.angle);
kugel.y := kugel.y + timeElapsed * speed * cos(kugel.angle);

Die Geschwindigkeit speed kann entweder eine Konstante sein oder du berechnest das irgendwie aus der Entfernung zum Cursor.

Zusätzlich muss in jedem Schritt der Winkel angepasst werden. Dazu berechnest du erstmal den Winkel zum Cursor:
Code:
vec.x := cursor.x - kugel.x; // das ist dein Vektor2
vec.y := cursor.y - kugel.y;
cursor.angle := arctan2(vec.x, vec.y);


Und nun passt du den Winkel der Kugel in jedem Schritt langsam an den Cursor an. Bei meiner Umsetzung hier dreht sich die Kugel um so schneller je größer die Winkeldifferenz ist.
Code:
change := cursor.angle - kugel.angle;
if change > 180 then change := change-360; // kürzere Drehrichtung wählen
kugel.angle := kugel.angle + timeElapsed * speed * change;
if kugel.angle < 0 then kugel.angle := kugel.angle + 360;
if kugel.angle >= 360 then kugel.angle := kugel.angle - 360;


Du musst ggf. aufpassen das sin/cos/arctan2 die Winkel nicht in Grad sondern im Bogenmaß verwenden. (bin kein Delphianer ;) )

_________________
Yeah! :mrgreen:


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]