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;