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

Aktuelle Zeit: So Jul 06, 2025 12:15

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit glProject
BeitragVerfasst: Do Okt 04, 2007 14:35 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Sep 23, 2005 20:31
Beiträge: 212
Wohnort: Sachsen/ Vogtland
Moin,

ich hab ein Problem mit folgendem Stück Quelltext:
Code:
  1. var winx, winy, winz: PGLDouble;
  2.     modelMatrix: TGLMatrixd4;
  3.     projMatrix: TGLMatrixd4;
  4.     viewport: TGLVectori4;
  5.     objx, objy, objz: double;
  6. begin
  7.       ...
  8.       objx := Steine[CPUMove1].Posi.x;
  9.       objy := Steine[CPUMove1].Posi.y;
  10.       objz := Steine[CPUMove1].Posi.z;
  11.  
  12.       glGetDoublev(GL_MODELVIEW_MATRIX, @modelmatrix);
  13.       glGetDoublev(GL_PROJECTION_MATRIX, @projMatrix);
  14.       glGetIntegerV(GL_VIEWPORT, @viewport);
  15.       if gluProject(objx,objy,objz,modelmatrix,projmatrix,viewport,@winx,@winy,@winz) = GL_TRUE then
  16.       begin
  17.         if (abs(winx^-cpuMousexPos)<10) OR (abs(winy^-cpuMouseyPos)<10) then
  18.         begin
  19.           //  Mauszeiger ist da. Aktion durchführen
  20.         end else
  21.         begin
  22.           //  Mauszeiger nachjustieren
  23.         end;
  24.       end else
  25.       begin
  26.         Log.LogError('GL_Error bei gluProject: '+IntToStr(glGetError),'');
  27.       end;


Problem mit dem Code ist, gluProject nicht GL_TRUE liefert. Daher springe ich in den Block, in dem ich den GL_Error in ein Logfile schreibe. Aber glGetError liefert den Fehlercode 0.
Wie muss ich das verstehen?

Dank und Gruß,
DNA


// Edit Lossy: Code durch Pascaltag ersetzt

_________________
Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 04, 2007 14:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich glaube du bist der Erste bei dem ich sehe der sich tatsächlich für den Rückgabewert von gluProject interessiert. ;)

Aber zu deinem Problem. Du hast win* bereits als Pointer auf Doubles deklariert. Diese Pointer zeigen aber nicht auf einen echten Speicher sondern irgendwo ins nirgendwo. Und dann übergibst du die pointer der pointer an gluProject.

Benutz mal bitte für win* kein PGLDouble sondern nur ein GLDouble und entferne das ^ bei win* unterhalb von gluProject. Das @ bei gluProject ist korrekt, da du ja den Pointer an die Funktion übergeben möchtest.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 04, 2007 15:43 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Sep 23, 2005 20:31
Beiträge: 212
Wohnort: Sachsen/ Vogtland
Hi Lossy Ex,

Danke für die Hinweise. Die Verwendung von PGLDouble war Käse. Da habe ich gepennt. Den Rückgabewert von GLProjekt finde ich schon relativ interessant, schließlich funktioniert der Aufruf im Moment nicht. :) (sollte ich Zweifel am Rückgabewert haben?)

Jedenfalls habe ich alles nach Deinen Vorschlägen abgeändert. Der Code sieht jetzt so aus:
Code:
  1. var winx, winy, winz: GLDouble;
  2.     modelMatrix: TGLMatrixd4;
  3.     projMatrix: TGLMatrixd4;
  4.     viewport: TGLVectori4;
  5.     objx, objy, objz: double;
  6.  
  7. begin
  8.     ...
  9.  
  10.       objx := Steine[CPUMove1].Posi.x;
  11.       objy := Steine[CPUMove1].Posi.y;
  12.       objz := Steine[CPUMove1].Posi.z;
  13.  
  14.       glGetDoublev(GL_MODELVIEW_MATRIX, @modelmatrix);
  15.       glGetDoublev(GL_PROJECTION_MATRIX, @projMatrix);
  16.       glGetIntegerV(GL_VIEWPORT, @viewport);
  17.       if gluProject(objx,objy,objz,modelmatrix,projmatrix,viewport,@winx,@winy,@winz) = GL_TRUE then
  18.       begin
  19.         // Machen tun
  20.       end else
  21.       begin
  22.         Log.LogError('GL_Error bei gluProject: '+IntToStr(glGetError),'');
  23.         sleep(2);
  24.       end;
  25.     end;


Die Ergebnisse auf den Variablen win* sind nach dem Funktionsaufruf unverändert. glProject funktioniert im o.g. Code nicht. Ein Ignorieren des Rückgabewertes würde also auch nix nützen. Noch 'ne Idee? DArf man GLProject evtl. in bestimmten Situationen nicht aufrufen?

Danke und Grüße,
DNA

// Edit Lossy: Code durch Pascaltag ersetzt

_________________
Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 04, 2007 17:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Bitte benutz die Pascaltags. Danke. :)

Das mit dem Rückgabewert finde ich sehr löblich. Ich denke mal der hat durchaus seine bewandniss. Aber so etwas wird schon ganz gerne mal ignoriert. Und du bist der erste bei dem ich den in Benutzung sehe. :)

Und zum Code. So spontan fällt mir nichts weiter auf.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 04, 2007 18:43 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
Könnten evtl. irgendwelche Eingangswerte nicht stimmen?

glGetDoublev(GL_MODELVIEW_MATRIX, @modelmatrix);
glGetDoublev(GL_PROJECTION_MATRIX, @projMatrix);
glGetIntegerV(GL_VIEWPORT, @viewport);

User69


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 04, 2007 20:34 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Sep 23, 2005 20:31
Beiträge: 212
Wohnort: Sachsen/ Vogtland
user69 hat geschrieben:
Könnten evtl. irgendwelche Eingangswerte nicht stimmen?

glGetDoublev(GL_MODELVIEW_MATRIX, @modelmatrix);
glGetDoublev(GL_PROJECTION_MATRIX, @projMatrix);
glGetIntegerV(GL_VIEWPORT, @viewport);

User69


Naja, die werden doch dadurch frisch ermittelt, oder?

_________________
Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 04, 2007 21:02 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Sep 23, 2005 20:31
Beiträge: 212
Wohnort: Sachsen/ Vogtland
Ich mach mal die Ingrid. :)
Nachdem ich den Aufruf von gluLookat zur Festlegung der Kamera vor glProject gebaut habe, läuft der Laden. Ich sehe den Fehler, kann das aber nur begrenzt nachvollziehen, da LoadIdendity schon ausgeführt war, und er damit wengistens falsche Ergebnisse hätte liefern sollen, oder.

Grüße, DNA

_________________
Heute code ich, morgen debug ich, und übermorgen caste ich die Königin auf int.
http://www.2ndmoon.de


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
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.010s | 16 Queries | GZIP : On ]