Hallo,
bei der Verwendung von gluUnproject treten bei mir regelmäßig Laufzeitfehler auf. "Regelmäßig" heißt hier "immer" Der Code den ich verwende, stammt aus dem Wiki:
Code:
function WinPosTo3DPos(X, Y:Integer): TGLVectord3;
var
viewport : TGLVectori4;
modelview : TGLMatrixd4;
projection: TGLMatrixd4;
Z : TGLdouble;
Y_new : TGLdouble;
Begin
glGetDoublev(GL_MODELVIEW_MATRIX,@modelview );//Aktuelle Modelview Matrix in einer Variable ablegen
glGetDoublev(GL_PROJECTION_MATRIX,@projection );//Aktuelle Projection[s] Matrix in einer Variable ablegen
glGetIntegerv(GL_VIEWPORT,@viewport );// Aktuellen Viewport in einer Variable ablegen
Y_new := viewport[3]- y;// In OpenGL steigt Y von unten (0) nach oben
// Auslesen des Tiefenpuffers an der Position (X/Y_new)
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
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)
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
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
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
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.
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?
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.