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

Aktuelle Zeit: Fr Jul 18, 2025 12:39

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Okt 16, 2008 11:14 
Offline
DGL Member

Registriert: Mi Okt 08, 2008 14:00
Beiträge: 8
Hi!

Ich schreibe zur Zeit eine DLL, die in eine fremde Anwendung injiziert wird und dort die SwapBuffers-Methode hookt. Bis jetzt kann ich Elemente in 2D hinzuzeichnen, indem ich die Projektionsmatrix mittels glOrtho setze usw.
Jedenfalls ist für mich auch das dreidimensionale Zeichnen von Interesse, wofür ich allerdings zuerst die verwendete perspektivische Projektionsmatrix kennen muss. Wenn die gehookte SwapBuffers-Methode aufgerufen wird, wurde die Projektionsmatrix leider schon auf die Identitätsmatrix zurückgesetzt (zumindestens liefert glGetFloatv mit GL_PROJECTION_MATRIX diese zurück).

Die Anwendung, in die meine DLL irgendwann zur Laufzeit injiziert wird, scheint zu diesem Zeitpunkt keinen Aufruf von gluPerspective oder glFrustum mehr zu tätigen. Darum habe ich die Methode glLoadIdentity gehookt und vor deren Ausführung die Projektionsmatrix abgerufen. Hier bekomme ich tatsächlich diverse Matrizen zurück:

Code:
  1. // die einzige orthogonale Projektionsmatrix
  2.  
  3.  0,00104166672099382  0                     0                   -1
  4.  
  5.  0                    0,00185185181908309   0                   -1
  6.  
  7.  0                    0                    -1                   -100
  8.  
  9.  0                    0                     0                    1
  10.  
  11.  
  12. // die erste perspektivische Projektionsmatrix
  13.  
  14. -5,6712818145752      0                     0                    0
  15.  
  16.  0                    11,4300527572632      0                    0
  17.  
  18.  0                    0                    -1,00019609928131    -0,600058853626251
  19.  
  20.  0                    0                    -1                    0
  21.  
  22.  
  23. // die zweite perspektivische Projektionsmatrix
  24.  
  25. 1,42814803123474      0                     0                    0
  26.  
  27. 0                     2,8217351436615      -0,0831626579165459   0
  28.  
  29. 0                     0                    -1,00011765956879    -0,435457944869995
  30.  
  31. 0                     0                    -1                    0


Beim Rückrechnen auf die Parameter, mit denen die Matrizen erzeugt wurden, scheine ich Fehler zu machen oder die Matrizen selbst sind falsch. Denn wenn ich mir bei den beiden letzten (und hoffentlich richtig als perspektivisch erkannten) Matrizen z.B. den Winkel ausrechnen würde, so kommen bei mir nur unrealistische Werte heraus.

Meine Frage bzw. meine Fragen an euch sind: Könnt ihr mir helfen, und die Erzeugungsparameter aus den Matrizen herausrechnen? Und wo könnte ich noch Hooks setzen, um die entsprechenden Matrizen herauszufinden?

Lg oli


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 16, 2008 12:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hast du schonmal drüber nachgedacht, gluPerspective zu hooken? oder glLoadMatrix? Je nach dem, wie die ihre Projektionsmatrix aufbauen...

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 16, 2008 13:47 
Offline
DGL Member

Registriert: Mi Okt 08, 2008 14:00
Beiträge: 8
Zitat:
Die Anwendung, in die meine DLL irgendwann zur Laufzeit injiziert wird, scheint zu diesem Zeitpunkt keinen Aufruf von gluPerspective oder glFrustum mehr zu tätigen.

Damit wollte ich implizit sagen, dass ich diese Methoden bereits gehookt habe. Werde es aber zur Sicherheit vielleicht noch einmal versuchen ;-)

glLoadMatrix ist eine gute Idee, werde das demnächst auch noch testen!

Lg oli

PS: wie sieht es mit den oben geposteten Matrizen aus, können diese stimmen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 16, 2008 15:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Das kann ich dir so direkt nicht sagen. Die beste Methode das herauszufinden dürfte sein, ne kleine Testanwendung zu schreiben und sie mit diesen Matrizen zu füttern. Dann nen paar quads zeichnen und schauen, wo die landen...

Die Passage mit gluperspective habe ich übersehen, mein Fehler. Dann werden die den kram höchstwahrscheinlich in irgendwelchen Variablen liegen haben oder übertreiben es mit der benutzung vom Matrix Stack. Also schau dir sicherheitshalber auch noch glPushMatrix und glPopMatrix an.

Gruß Lord Horazont

P.S. Der Grund, warum deine Projektionsmatrix nicht die richtige ist, kann sein, dass die Anwendung die Transformationen (Rotation, Verschiebung usw.) der Kamera direkt in der Projektionsmatrix durchführt. Für manche Zwecke ist das vorteilhafter als die Modelview Matrix.

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 18, 2008 12:36 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Evtl wäre auch glMulMatrix von Interesse

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


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


Wer ist online?

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