gluUnProject: Unterschied zwischen den Versionen
Aus DGL Wiki
Flash (Diskussion | Beiträge) (Version Hochgeladen) |
DGLBot (Diskussion | Beiträge) K (Der Ausdruck ''<pascal>(.*?)</pascal>'' wurde ersetzt mit ''<source lang="pascal">$1</source>''.) |
||
(14 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | = | + | = gluUnProject = |
+ | |||
+ | |||
− | |||
== Name == | == Name == | ||
− | + | '''gluUnProject''' - rechnet Fensterkoordinaten in Objektkoordinaten um. | |
− | ''' | + | |
+ | |||
− | |||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
− | + | function '''gluUnProject'''(''winx'', ''winy'', ''winz'': TGLdouble; | |
− | ''' | + | const ''modelMatrix'': TGLMatrixd4; |
− | ''modelMatrix'': TGLMatrixd4; | + | const ''projMatrix'': TGLMatrixd4; |
− | ''projMatrix'': TGLMatrixd4; | + | const ''viewport'': TGLVectori4; |
− | ''viewport'': | ||
''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> | |
− | ''' | + | 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 == | ||
+ | |||
+ | <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 == | == Siehe auch == | ||
− | + | [[glGet]], [[gluProject]], [[glReadPixels]] | |
− | [[glGet]], [[gluProject]] | + | |
+ | [[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;