OpenGL: Koordinaten eines Punktes nach Rotation berechnen?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Punky Duck
Beiträge: 2
Registriert: 09.09.2010, 17:27

OpenGL: Koordinaten eines Punktes nach Rotation berechnen?

Beitrag von Punky Duck »

Sowohl OpenGL als auch 3D Grafikprogrammierung im Allgemeinen sind neue Gebiete für mich in dich ich mich gerade versuche einzuarbeiten. Um mich einzuarbeiten habe ich in den letzten Tagen unser Sonnensystem mit einem kleinen Raumschiff das darin herumfliegt nachgebaut. Jetzt stehe ich allerdings vor einem Problem das ich nicht lösen kann.

Die Situation ist folgende:
Ich platziere einen Planeten (sagen wir mal Saturn) zu Beginn an der Position (2/2/-5). Nun wird durch das verschieben der Kameraposition das gesamte Sonnensystem verschoben und rotiert. Danach möchte ich wissen an welchen Koordinaten sich Saturn nun befindet. Um das herauszufinden dachte ich mir ich hole mir mit

Code: Alles auswählen

 gl.glGetDoublev(GL.GL_MODELVIEW_MATRIX, mvmatrix, 0);
Die aktuelle Modelview Matrix und multipliziere die dann mit dem Ortsvektor den Saturn zu Beginn hatte. Also mit (2/2/-5). Dann müsste ich eigentlich die aktuelle Position von Saturn bekkommen. Wäre das Vorgehen grundsätzlich korrekt, oder bin ich da auf dem Holzweg?

Falls das so stimmt hätte ich noch ein paar Fragen dazu:
Von welcher Seite muss ich den Vektor mit der Matrix multiplizieren?
Muss ich die Matrixmultiplikation selbst implementieren oder gibt es eine OpenGL Funktion die das für mich macht?
Die Modelview Matrix ist ja eine 4x4 Matrix. D.h. ich brauche auch einen Vektor mit 4 Zeilen. X, Y, Z und was noch?

Wäre toll wenn ihr mir weiterhelfen könntet!
joggel

Re: OpenGL: Koordinaten eines Punktes nach Rotation berechne

Beitrag von joggel »

Ich platziere einen Planeten (sagen wir mal Saturn) zu Beginn an der Position (2/2/-5). Nun wird durch das verschieben der Kameraposition das gesamte Sonnensystem verschoben und rotiert.
Wie veränderst Du die Kameraposition.
Um das herauszufinden dachte ich mir ich hole mir mit

Code: Alles auswählen

 gl.glGetDoublev(GL.GL_MODELVIEW_MATRIX, mvmatrix, 0);
Die aktuelle Modelview Matrix und multipliziere die dann mit dem Ortsvektor den Saturn zu Beginn hatte. Also mit (2/2/-5). Dann müsste ich eigentlich die aktuelle Position von Saturn bekkommen. Wäre das Vorgehen grundsätzlich korrekt, oder bin ich da auf dem Holzweg?
Also ich denke, dass das korrekt ist.
Man kann ja jedes Objekt mit einer anderen ModelView-Matrix zeichnen lassen.
http://jerome.jouvie.free.fr/OpenGl/Lessons/Lesson2.php
Muss ich die Matrixmultiplikation selbst implementieren oder gibt es eine OpenGL Funktion die das für mich macht?
Gibts bestimmt gute Math-Libs im Netz...
Vielleicht ist die ganz ok dafür: http://glm.g-truc.net/

Bin aber auch nicht allzu firm darin ;)
joeydee
Establishment
Beiträge: 1044
Registriert: 23.04.2003, 15:29
Kontaktdaten:

Re: OpenGL: Koordinaten eines Punktes nach Rotation berechne

Beitrag von joeydee »

Wenn die Position der Matrix mit berücksichtigt werden soll (und das soll sie ja), nimm für den Vektor (x,y,z,1). Nur für die Drehung wäre es 0.
Punky Duck
Beiträge: 2
Registriert: 09.09.2010, 17:27

Re: OpenGL: Koordinaten eines Punktes nach Rotation berechne

Beitrag von Punky Duck »

joggel hat geschrieben:
Ich platziere einen Planeten (sagen wir mal Saturn) zu Beginn an der Position (2/2/-5). Nun wird durch das verschieben der Kameraposition das gesamte Sonnensystem verschoben und rotiert.
Wie veränderst Du die Kameraposition.
Indem ich das gesamte Sonnensystem in die entgegengesetzte Richtung der Kamerabewegung bewege. Also wenn ich mich nach links drehe drehe ich alles nach rechts.
Wenn die Position der Matrix mit berücksichtigt werden soll (und das soll sie ja), nimm für den Vektor (x,y,z,1). Nur für die Drehung wäre es 0.
Danke, ich werde es so versuchen.
Antworten