gluUnProject: Unterschied zwischen den Versionen
Aus DGL Wiki
Flash (Diskussion | Beiträge) K (Wird offline bearbeitet) |
DGLBot (Diskussion | Beiträge) K (Der Ausdruck ''<pascal>(.*?)</pascal>'' wurde ersetzt mit ''<source lang="pascal">$1</source>''.) |
||
(15 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | = | + | = 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 == | ||
+ | {| 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 == | ||
+ | '''gluUnProject''' rechnet Fensterkoordinaten, mittels ''modelMatrix'', ''projMatrix'' und ''viewport'', in Objektkoordinaten um.<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 == | ||
+ | |||
+ | <source lang="pascal">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;</source> | ||
+ | |||
+ | |||
+ | |||
+ | == Siehe auch == | ||
+ | [[glGet]], [[gluProject]], [[glReadPixels]] | ||
+ | |||
+ | [[Kategorie:GLU|UnProject]] |
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;