?
Also erstmal Danke für deine ausführlichen Antworten. Ich hab da jetzt viel Zeit mit verbracht und denke, ich mache irgendwo einen ganz ganz dummen Fehler. Folgendes Bild:
http://abload.de/img/proj9zb2o.png
Ich habe rausgezoomt (z=4) und zeichne ein Quadrat. Für die gegebene Mausposition erhalte ich die Werte x~=89.32 und y~=45.04. Das ist doch so nicht richtig, wenn das Quadrat eine Seitenlänge von 2 hat?
Verwende ich anstatt glFrustum die Funktion glOrtho, dann passen die berechneten Werte genau. Beispiel: Der Cursor ist auf der oberen rechten Ecke des Quadrats, dann erhalte ich auch schön 1,1 als Wert.
Was ist hier mein Denkfehler?! Ich hab auch versucht, das mit Matlab zu berechnen und komme auf ähnliche Werte:
clc
% -----------------------------------------------------
modelview = [1 0 0 0 ;
0 1 0 0 ;
0 0 1 0 ;
0 0 0 1 ];
projection = [0.96596 0 0 0 ;
0 1.56969 0 0 ;
0 0 -1.00002 -1 ;
0 0 -0.00200002 0 ];
viewport = [0 0 650 400];
mousePos = [559 318];
winZ = 1;
% -----------------------------------------------------
A = modelview*projection
A_inv = inv(A)
width = 650;
height = 400;
mousePos(1,1)=(mousePos(1,1)-viewport(1,1))/viewport(1,3)*2.0-1.0;
mousePos(1,2)=(mousePos(1,2)-viewport(1,2))/viewport(1,4)*2.0-1.0;
vec4 = [mousePos(1,1) mousePos(1,2) winZ, 1.0]
pos = vec4 * A_inv
pos(1,4) = 1.0/pos(1,4);
pos(1,1) = pos(1,1)*pos(1,4);
pos(1,2) = pos(1,2)*pos(1,4);
pos(1,3) = pos(1,3)*pos(1,4);
pos ist dann:
74.5380 37.5874 -100.0010 100.0010