- 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, @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;