habe gerade ein kleines Problemchen.. Ich habe da eine ModelViewMatrix die ein Objekt repräsentiert (Position & Lage).. Nun brauch ich die genaue Position in Weldkoordinaten.. Aber das Problem ist, das in dieser Matrix auch die Kameratransformation&Rotation drin steckt.. Wie bekomm ich die da raus?
Registriert: Di Dez 27, 2005 12:44 Beiträge: 393 Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo Thmfrnk,
kannst du dein Problem nochmal genauer erläutern? Suchst du jetzt die Koordinaten nach oder vor der Transformation. Normalerweise besteht die ModelViewMatrix aus Kameratransformation&Rotation, da es in OpenGL keinen Unterschied macht, ob man z.B. ein Objekt eine Einheit nach rechts, oder die Kamera eine Einheit nach links verschiebt (alles ist relativ ). Und was ist die Position deines Objektes? Eigentlich können nur einzelne Punkte eine Position haben, oder meinst du den Mittelpunkt des Objektes? Falls dein Objekt vor der Transformation einen Nullpunkt hatte, dann kannst du diese Position nach der Transformation direkt an der Matrix ablesen (letzte Spalte, wegen MV * (0, 0, 0, 1)).
Viele Grüße dj3hut1
_________________ Wenn Gauß heute lebte, wäre er ein Hacker. Peter Sarnak, Professor an der Princeton University
für meine Beleuchtung brauch ich von diesem Objekt die 3D Position X/Y/Z. Jedes objekt kann mehrfach verschachtelt werden ("MotorObjekte") d.h. pro Verschachtelung wird eine neue Matrix aufm Stack geschoben und rotiert oder transformiert... soo nun zieh ich mir beim Rendern der Lampe, wo die Modelviewmatrix alle Transformationen inkl. auch der camera enthält. Nun wollte ich über [3][0], [3][1], [3][2] die Position auslesen, aber pustekuchen diese ist Kamera abhängig...
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Du hast deine Matrix welche die Kamera beschreibt sowie die Position deines Objektes in den Koordinaten aus der Sicht der Kamera. An der Stelle kannst du durch Multiplikation der Matrix mit den Koordinaten sowie der Einbeziehung der Translation die Weltkoordinaten errechnen.
Also nochmal: 1. IdentityMatrix 2. Camera Rotationen und Translationen 3. Viele unbekannte Rotationen und Translationen die ich später NICHT kenne
Nun bin ich an der Stelle wo ich die aktuelle Position in Weltkoordinaten, also ohne die Camera (2.) brauche. Ich habe lediglich die aktuelle ModelViewMatrix (wo auch die Camera drin steckt) und die CameraMatrix.
Vielleicht gibt es auch noch eine mathematische Lösung, aber, wenn ich Dein Problem richtig verstanden habe, dann mußt Du bei jeder Berechnung (Translation, Rotation) den gewünschten Punkt ausrechnen und merken. Die CamerAH könnte das.
Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
Ich bin mir nicht ganz sicher, ob das bei Matrizen auch funktioniert (denn dort ist die Reihenfolge der Multiplikation ja nicht egal). Aber wenn deine EndMatrix = CameraMatrix * ObjektMatrix ist, dann müsste doch die ObjektMatrix = EndMatrix / CameraMatrix sein.
Multipliziere die EndMatrix mit der invertierten CameraMatrix.
Wenn das nicht funktioniert, würde ich mir halt die Camera-Einstellungen in einer Klasse merken.
Registriert: Di Dez 27, 2005 12:44 Beiträge: 393 Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,
ich hätte noch eine andere theoretische Möglichkeit an die Objektmatrix ranzukommen, weiß aber nicht ob es wirklich funktioniert :
Kameraoperationen ... glPushMatrix(); //Kameramatrix auf den Stack glLoadIdentity(); Objektoperationen... glGet(GL_MODELVIEW_MATRIX...), //ObjektMatrix holen und in Variable speichern glPopMatrix(); //Kameramatrix vom Stack holen glMultMatrix(...); //Objektmatrix mit Kameramatrix multiplizieren drawObject();
Wenn du mehrere Objekte hast, müsstest du die Kameramatrix zweimal auf den Stack packen.
Viele Grüße dj3hut1
_________________ Wenn Gauß heute lebte, wäre er ein Hacker. Peter Sarnak, Professor an der Princeton University
Mitglieder in diesem Forum: 0 Mitglieder und 6 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.