gluUnProject: Unterschied zwischen den Versionen
Aus DGL Wiki
Flash (Diskussion | Beiträge) K (→Delphi-Spezifikation) |
DGLBot (Diskussion | Beiträge) K (Der Ausdruck ''<pascal>(.*?)</pascal>'' wurde ersetzt mit ''<source lang="pascal">$1</source>''.) |
||
(5 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= gluUnProject = | = gluUnProject = | ||
− | + | ||
+ | |||
== Name == | == Name == | ||
'''gluUnProject''' - rechnet Fensterkoordinaten in Objektkoordinaten um. | '''gluUnProject''' - rechnet Fensterkoordinaten in Objektkoordinaten um. | ||
− | + | ||
+ | |||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
− | ''' | + | function '''gluUnProject'''(''winx'', ''winy'', ''winz'': TGLdouble; |
− | ''modelMatrix'': TGLMatrixd4; | + | const ''modelMatrix'': TGLMatrixd4; |
− | ''projMatrix'': TGLMatrixd4; | + | const ''projMatrix'': TGLMatrixd4; |
− | ''viewport'': TGLVectori4; | + | const ''viewport'': TGLVectori4; |
''objx'', ''objy'', ''objz'': PGLdouble): TGLint; | ''objx'', ''objy'', ''objz'': PGLdouble): TGLint; | ||
− | + | ||
== Parameter == | == Parameter == | ||
− | + | {| border="1" rules="all" | |
− | + | ! ''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 == | == Beschreibung == | ||
'''gluUnProject''' rechnet Fensterkoordinaten, mittels ''modelMatrix'', ''projMatrix'' und ''viewport'', in Objektkoordinaten um.<br> | '''gluUnProject''' rechnet Fensterkoordinaten, mittels ''modelMatrix'', ''projMatrix'' und ''viewport'', in Objektkoordinaten um.<br> | ||
− | Das Ergebnis wird in ''objx'', ''objy'' bzw. ''objz'' abgelegt. <br> | + | Das Ergebnis wird in ''objx'', ''objy'' bzw. ''objz'' abgelegt.<br> |
+ | |||
+ | Der Rückgabewert ist '''GL_TRUE''', wenn die Berechnung erfolgreich war, und '''GL_FALSE''', wenn ein Fehler aufgetreten ist. | ||
+ | |||
− | |||
− | |||
== Beispiel == | == Beispiel == | ||
− | <pascal>function WinPosTo3DPos(X, Y: Integer): TGLVectord3; | + | <source lang="pascal">function WinPosTo3DPos(X, Y: Integer): TGLVectord3; |
var | var | ||
viewport : TGLVectori4; | viewport : TGLVectori4; | ||
modelview : TGLMatrixd4; | modelview : TGLMatrixd4; | ||
projection: TGLMatrixd4; | projection: TGLMatrixd4; | ||
− | Z : | + | Z : TGLFloat; |
− | Y_new : | + | Y_new : Integer; |
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 | ||
Zeile 65: | Zeile 63: | ||
glReadPixels(X, Y_new, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, @Z ); | 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: | + | // 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;</ | + | end;</source> |
+ | |||
+ | |||
== Siehe auch == | == Siehe auch == |
Aktuelle Version vom 10. März 2009, 19:22 Uhr
Inhaltsverzeichnis
gluUnProject
Name
gluUnProject - rechnet Fensterkoordinaten in Objektkoordinaten um.
Delphi-Spezifikation
function gluUnProject(winx, winy, winz: TGLdouble; const modelMatrix: TGLMatrixd4; const projMatrix: TGLMatrixd4; const 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;