gluUnProject: Unterschied zwischen den Versionen
Aus DGL Wiki
Flo (Diskussion | Beiträge) () |
Flo (Diskussion | Beiträge) K (→Beispiel) |
||
Zeile 48: | Zeile 48: | ||
== Beispiel == | == Beispiel == | ||
− | <pascal>function | + | <pascal>function WinPosTo3DPos(X, Y: Integer): TGLVectord3; |
var | var | ||
viewport: TGLVectori4; | viewport: TGLVectori4; | ||
Zeile 67: | Zeile 67: | ||
gluUnProject(X, Y_new, Z,modelview, projection, viewport,@Result[0], @Result[1], @Result[2]); | gluUnProject(X, Y_new, Z,modelview, projection, viewport,@Result[0], @Result[1], @Result[2]); | ||
end;</pascal> | end;</pascal> | ||
+ | |||
== Siehe auch == | == Siehe auch == | ||
[[glGet]], [[gluProject]], [[glReadPixels]] | [[glGet]], [[gluProject]], [[glReadPixels]] | ||
[[Kategorie:GLU|UnProject]] | [[Kategorie:GLU|UnProject]] |
Version vom 20. August 2005, 13:06 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 WinPosTo3DPos(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;