gluUnProject: Unterschied zwischen den Versionen
Aus DGL Wiki
(→Beispiel) |
(→Beispiel) |
||
| Zeile 58: | Zeile 58: | ||
modelview : TGLMatrixd4; | modelview : TGLMatrixd4; | ||
projection: TGLMatrixd4; | projection: TGLMatrixd4; | ||
| − | Z : | + | Z : TGLFloat; |
Y_new : Integer; | Y_new : Integer; | ||
begin | begin | ||
| Zeile 70: | Zeile 70: | ||
// Errechnen des Punktes welcher mit den beiden Matrizen multipliziert (X/Y_new/Z) ergibt: | // 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]); | + | gluUnProject(X, Y_new, Z, modelview, projection, viewport, @Result[0], @Result[1], @Result[2]); |
end;</pascal> | end;</pascal> | ||
Version vom 28. Juni 2007, 17:11 Uhr
Inhaltsverzeichnis
gluUnProject
Name
gluUnProject - rechnet Fensterkoordinaten in Objektkoordinaten um.
Delphi-Spezifikation
function gluUnProject(winx, winy, winz: TGLdouble;
modelMatrix: TGLMatrixd4;
projMatrix: TGLMatrixd4;
viewport: TGLVectori4;
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 : TGLFloat; 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, @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;