gluUnProject: Unterschied zwischen den Versionen
Aus DGL Wiki
Flo (Diskussion | Beiträge) K (→Siehe auch) |
Flo (Diskussion | Beiträge) () |
||
Zeile 45: | Zeile 45: | ||
Der Rückgabewert ist '''GL_TRUE''' wenn die Berechnung erfolgreich war und '''GL_FALSE''', wenn ein Fehler aufgetreten ist. | Der Rückgabewert ist '''GL_TRUE''' wenn die Berechnung erfolgreich war und '''GL_FALSE''', wenn ein Fehler aufgetreten ist. | ||
<br> | <br> | ||
+ | |||
+ | == Beispiel == | ||
+ | |||
+ | <pascal>function GetOpenGLPos(X, Y: Integer): TGLVectord3; | ||
+ | var | ||
+ | viewport: TGLVectori4; | ||
+ | modelview: TGLMatrixd4; | ||
+ | projection: TGLMatrixd4; | ||
+ | Z: Single; | ||
+ | Y_new:Integer; | ||
+ | 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) | ||
+ | glReadPixels(X, Y_new, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @winZ ); | ||
+ | |||
+ | // Errechnen des Punktes welcher mit den beiden Matrizen multipliziert (X/Y_new/Z) ergibt: | ||
+ | gluUnProject(X, Y_new, Z,modelview, projection, viewport,@Result[0], @Result[1], @Result[2]); | ||
+ | end;</pascal> | ||
== Siehe auch == | == Siehe auch == | ||
[[glGet]], [[gluProject]], [[glReadPixels]] | [[glGet]], [[gluProject]], [[glReadPixels]] | ||
[[Kategorie:GLU|UnProject]] | [[Kategorie:GLU|UnProject]] |
Version vom 20. August 2005, 13:05 Uhr
Inhaltsverzeichnis
gluUnProjekt
Name
gluUnProjekt - rechnet Fensterkoordinaten in Objektkoordinaten um.
Delphi-Spezifikation
function gluUnProject(winx, winy, winz: TGLdouble; modelMatrix: TGLMatrixd4; projMatrix: TGLMatrixd4; viewport: TVector4i; objx, objy, objz: PGLdouble): TGLint;
Parameter
winx, winy, winz | Die umzurechnenden Fensterkoordinaten. |
modelMatrix | Die aktuelle Modelviewmatrix. (wie sie mittels glGetDoublev abgefragt werden kann.) |
projMatrix | Die aktuelle Projektionsmatrix. (wie sie mittels glGetDoublev abgefragt werden kann.) |
viewport | Das aktuelle Sichtfeld. (wie es mittels glGetIntegerv abgefragt werden kann.) |
objx, objy, objz | Enthält die berechneten Objektkoordinaten. |
Beschreibung
gluUnProjekt rechnet Fensterkoordinaten, mittels modelMatrix, projMatrix und viewport, in Objektkoordinaten um.
Das Ergebnis wird in objx, objy bzw. objz abgelegt.
Der Rückgabewert ist GL_TRUE wenn die Berechnung erfolgreich war und GL_FALSE, wenn ein Fehler aufgetreten ist.
Beispiel
function GetOpenGLPos(X, Y: Integer): TGLVectord3; var viewport: TGLVectori4; modelview: TGLMatrixd4; projection: TGLMatrixd4; Z: Single; Y_new:Integer; 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) glReadPixels(X, Y_new, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @winZ ); // Errechnen des Punktes welcher mit den beiden Matrizen multipliziert (X/Y_new/Z) ergibt: gluUnProject(X, Y_new, Z,modelview, projection, viewport,@Result[0], @Result[1], @Result[2]); end;