gluUnProject: Unterschied zwischen den Versionen
Aus DGL Wiki
Flash (Diskussion | Beiträge) K |
Flash (Diskussion | Beiträge) K (→Beispiel) |
||
| Zeile 50: | Zeile 50: | ||
<pascal>function WinPosTo3DPos(X, Y: Integer): TGLVectord3; | <pascal>function WinPosTo3DPos(X, Y: Integer): TGLVectord3; | ||
var | var | ||
| − | viewport: | + | viewport : TGLVectori4; |
| − | modelview: | + | modelview : TGLMatrixd4; |
projection: TGLMatrixd4; | projection: TGLMatrixd4; | ||
| − | Z: | + | Z : TGLdouble; |
| − | Y_new: | + | Y_new : TGLdouble; |
begin | begin | ||
glGetDoublev(GL_MODELVIEW_MATRIX, @modelview ); //Aktuelle Modelview Matrix in einer Variable ablegen | glGetDoublev(GL_MODELVIEW_MATRIX, @modelview ); //Aktuelle Modelview Matrix in einer Variable ablegen | ||
Version vom 18. Oktober 2005, 13:23 Uhr
Inhaltsverzeichnis
gluUnProject
Name
gluUnProject - 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
gluUnProject 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 : 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) glReadPixels(X, Y_new, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @Z ); // 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;