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

Aktuelle Zeit: Fr Jul 18, 2025 11:49

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



Ein neues Thema erstellen Auf das Thema antworten  [ 31 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Laufzeitfehler beim gluUnproject
BeitragVerfasst: Mi Dez 28, 2005 17:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 28, 2005 17:43
Beiträge: 18
Hallo,
bei der Verwendung von gluUnproject treten bei mir regelmäßig Laufzeitfehler auf. "Regelmäßig" heißt hier "immer" :mrgreen:
Der Code den ich verwende, stammt aus dem Wiki:

Code:
  1. function WinPosTo3DPos(X, Y: Integer): TGLVectord3;
  2. var
  3.   viewport  : TGLVectori4;
  4.   modelview : TGLMatrixd4;
  5.   projection: TGLMatrixd4;
  6.   Z         : TGLdouble;
  7.   Y_new     : TGLdouble;
  8. Begin
  9.   glGetDoublev(GL_MODELVIEW_MATRIX, @modelview ); //Aktuelle Modelview Matrix in einer Variable ablegen
  10.   glGetDoublev(GL_PROJECTION_MATRIX, @projection ); //Aktuelle Projection[s] Matrix in einer Variable ablegen
  11.   glGetIntegerv(GL_VIEWPORT, @viewport ); // Aktuellen Viewport in einer Variable ablegen
  12.   Y_new := viewport[3] - y; // In OpenGL steigt Y von unten (0) nach oben
  13.  
  14.   // Auslesen des Tiefenpuffers an der Position (X/Y_new)
  15.   glReadPixels(X, round(Y_new), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @Z );
  16.  
  17.   // Errechnen des Punktes welcher mit den beiden Matrizen multipliziert (X/Y_new/Z) ergibt:
  18.   gluUnProject(X, Y_new, Z,modelview, projection, viewport, Result[0], Result[1], Result[2]);
  19. End;


Den Fehler habe ich auf den Befehl GluUnproject eingegrenzt. Die Koordinaten liefert mir die aktuelle Mausposition im Fenster. Vielleicht sollte ich erwähnen, dass ich nicht Delphi sondern Freepascal verwende. Allerdings verwende ich die dglOpengl. Anstatt wie im Wiki beschrieben übergebe ich als letzte drei Parameter keinen Pointer sondern direkt die Vektorvariable, da FPC sonst meckert, dass es keinen Pointer sondern einen Double erwartet. Der Fehler den mir das Programm ausspuckt lautet:

Zitat:
An unhandled exception occurred at $68FCA784 :
EAccessViolation : Access violation
$68FCA784
$68FCA8B0
$0040114F


Brauche schnell Hilfe. Danke

Edit by Flash: Code -> Pascaltags


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 18:04 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wie alt ist deine DGLOpenGL.pas?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 18:19 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 28, 2005 17:43
Beiträge: 18
1.8 Beta


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 19:39 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 28, 2005 17:43
Beiträge: 18
Okay, hab die neuste Version runtergeladen. Aber funktioniert auch nicht :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 20:58 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
Was funktioniert denn nicht ? Die selbe Fehler ?

Ich muss allerdings die letzte Zeile ändern, so:
Code:
  1.  gluUnProject(X, Y_new, Z,modelview, projection, viewport, @Result[0], @Result[1], @Result[2]);

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 21:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 28, 2005 17:43
Beiträge: 18
Immernoch der gleiche Fehler. Die Zeile hab ich natürlich schon geändert, da der Compiler sonst gemeckert hätte.
Hatte schon Die @result[...] Parameter in eine globale Variable geändert, weil ich dachte, dass FPC vlt Probleme hat mit einem Zugriff auf Result (trotz Delphimode)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 28, 2005 23:04 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Was steht denn in den Vaiablen zum Zeitpunkt des Aufrufs?

Hast du überall DGLOpenGL.pas benutzt, oder irgend wo mal nen anderen Header?
Wenn du den Befehl ausklammerst, kommt der Fehler dann auch?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 00:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 28, 2005 17:43
Beiträge: 18
Nein, wenn ich den ausklammer kommt kein Fehler.
Welche Variablen meinst du? Die die gluUnproject übergeben werden?
X = 245
Y_new = 3.280000000E+02
Z = 1.000000000E+00

Die X/Y Koordinaten, die am Anfang übergeben werden sind: 245/152


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 11:59 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Dann mach nochmal folgendes.

Guck dir mal die anderen Variablen an (die Matrizen). Zeig die uns mal. Vielleicht sind die ja kaputt. Wenn du z.B. ein glScale() mit einer 0 als Parameter aufrufst, gehen dir die Matrizen kaputt.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 14:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 28, 2005 17:43
Beiträge: 18
Okay. Hab den Viewport auch mal mit beigepackt.

Zitat:
Init SDL and OpenGl...
debug
X = 356; Y = 236; New_Y = 2.440000000E+02
modelview[0, 0] = 8.535533547401428E-001
modelview[0, 1] = 1.464465856552124E-001
modelview[0, 2] = 4.999999403953553E-001
modelview[0, 3] = 0.000000000000000E+000
modelview[1, 0] = 1.464465856552124E-001
modelview[1, 1] = 8.535533547401428E-001
modelview[1, 2] = -4.999999403953553E-001
modelview[1, 3] = 0.000000000000000E+000
modelview[2, 0] = -4.999999403953553E-001
modelview[2, 1] = 4.999999403953553E-001
modelview[2, 2] = 7.071067690849304E-001
modelview[2, 3] = 0.000000000000000E+000
modelview[3, 0] = 0.000000000000000E+000
modelview[3, 1] = 0.000000000000000E+000
modelview[3, 2] = -1.000000000000000E+002
modelview[3, 3] = 1.000000000000000E+000
-----------
projection[0, 0] = 1.810660123825073E+000
projection[0, 1] = 0.000000000000000E+000
projection[0, 2] = 0.000000000000000E+000
projection[0, 3] = 0.000000000000000E+000
projection[1, 0] = 0.000000000000000E+000
projection[1, 1] = 2.414213657379150E+000
projection[1, 2] = 0.000000000000000E+000
projection[1, 3] = 0.000000000000000E+000
projection[2, 0] = 0.000000000000000E+000
projection[2, 1] = 0.000000000000000E+000
projection[2, 2] = -1.002002000808716E+000
projection[2, 3] = -1.000000000000000E+000
projection[3, 0] = 0.000000000000000E+000
projection[3, 1] = 0.000000000000000E+000
projection[3, 2] = -2.002002000808716E-001
projection[3, 3] = 0.000000000000000E+000
-----------
viewport[0] = 0
viewport[1] = 0
viewport[2] = 640
viewport[3] = 480


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 20:09 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
hmm, die Betrachtungsmatrix sieht gut aus. Ist invertierbar, und der Rotationsteil ist orthonormal, also keine Skalierungen.

Das Projektionsmoped ist denke ich auch ok, zummindest wenn l = -r und t = -b, wovon ich jetzt einfach mal ausgehe, weil es normal ist...

Was ich mal versuchen würde, ist nicht Result hineinzureichen, sondern noch irgend ein VecHelp : TGLVectord3 zu definieren, und das zu verwenden. Kannst dann ja anschließend Result := VecHelp machen. Nur um sicher zu gehen, dass der Compiler da nicht was verwurstet hat.

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 20:19 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 28, 2005 17:43
Beiträge: 18
Nope. Immernoch das gleiche


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 21:51 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Weiß gerade nicht, wie in deinem Header gluUnproject definiert ist, aber hast du mal versucht, Pointer auf die Matrizen und den Viewport zu übergeben?

Ich habs bei mir (Borlands Header-Unit) noch so:
Code:
  1.  
  2. function  gluUnProject(winx, winy, winz: GLdouble;
  3.                       modelMatrix: PGLdouble;
  4.                       projMatrix: PGLdouble;
  5.                       viewport: PGLint;
  6.                       var objx, objy, objz: GLdouble): Integer; stdcall;
  7.  

Das wäre dann:
Code:
  1.  
  2. gluUnProject(X, Y_new, Z, @modelview[0, 0], @projection[0, 0], @viewport[0], Result[0], Result[1], Result[2]);
  3.  

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 22:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 28, 2005 17:43
Beiträge: 18
Hat leider nicht funktioniert.

TgluUnProject = function(winx, winy, winz: TGLdouble; modelMatrix: TGLMatrixd4; projMatrix: TGLMatrixd4; viewport: TVector4i; var objx, objy, objz: TGLdouble): TGLint;
Also keine Pointer. Es ist doch echt zum verzweifeln. *Heul* :(

Halt das Original aus der neusten dglOpengl. Ich hab leider kein Delphi, sonst würde ich probieren, ob es da auch nicht geht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 29, 2005 22:08 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Zitat:
Also keine Pointer. Es ist doch echt zum verzweifeln. *Heul*

Pointer oder var sind das gleiche. Das sollte keinen Unterschied machen.
Kannst du mal vor dem Aufruf von gluUnproject, DebugBreak; (unit windows) einfügen und die fertige Exe Datei posten?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 31 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
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.009s | 15 Queries | GZIP : On ]