glWindowPos

Aus DGL Wiki
Wechseln zu: Navigation, Suche

glWindowPos

Name

glWindowPos - Setzt die aktuelle Rasterposition in Fensterkoordinaten.

Delphi-Spezifikation

procedure glWindowPos2d (x: TGLdouble; y: TGLdouble);
procedure glWindowPos2f (x: TGLfloat; y: TGLfloat);
procedure glWindowPos2i (x: TGLint; y: TGLint);
procedure glWindowPos2s (x: TGLshort; y: TGLshort);
procedure glWindowPos3d (x: TGLdouble; y: TGLdouble; z: TGLdouble);
procedure glWindowPos3f (x: TGLfloat; y: TGLfloat; z: TGLfloat);
procedure glWindowPos3i (x: TGLint; y: TGLint; z: TGLint);
procedure glWindowPos3s (x: TGLshort; y: TGLshort; z: TGLshort); 

Parameter

x X-Wert der neuen Rasterposition in Fensterkoordinaten.
y Y-Wert der neuen Rasterposition in Fensterkoordinaten.
z Z-Wert der neuen Rasterposition in Fensterkoordinaten; Standardwert ist 0.

Delphi-Spezifikation

procedure glWindowPos2dv(const v: PGLdouble);
procedure glWindowPos2fv(const v: PGLfloat);
procedure glWindowPos2iv(const v: PGLint);
procedure glWindowPos2sv(const v: PGLshort);
procedure glWindowPos3dv(const v: PGLdouble);
procedure glWindowPos3fv(const v: PGLfloat);
procedure glWindowPos3iv(const v: PGLint);
procedure glWindowPos3sv(const v: PGLshort);

Parameter

v Ein Zeiger auf 2 oder 3 Elemente je nach Funktionstyp.

Beschreibung

glWindowPos ist eine Alternative zum Setzen von der aktuellen Rasterposition in Fensterkoordinaten mit glRasterPos .

glWindowPos3 erhält drei Werte, welche x, y und z angeben, während glWindowPos2 nur zwei Werte x und y annimmt. (z wird implizit auf 0 gesetzt). Die aktuelle Rasterposition, (xw, yw, zw, wc) wird definiert durch : xw = x, yw = y,

Raster z formel.png

und wc = 1, wobei n und f die Werte sind, welche an glDepthRange übergeben werden.

Im Gegensatz zu glRasterPos wird die Beleuchtung, die Erzeugung der Texturkoordinaten und die Clipping-Operation nicht durch glWindowPos durchgeführt. Stattdessen wird im RGBA-Modus die aktuelle Raster- und Zweitfarbe durch Mapping der aktuellen Farbe (spezifiziert mit glColor) bzw. Zweitfarbe (spezifiziert mit glSecondaryColor) auf den Bereich [0, 1] erhalten. Im Farbindexmodus wird der aktuelle Raster-Farbindex auf den aktuellen Farbindex gesetzt. Die aktuellen Raster-Texturkoordinaten werden auf die aktuellen Texturkoordinaten gesetzt, und das Gültigkeitsbit wird gesetzt.

Falls der Wert der Nebelquelle auf GL_FOR_COORD_SRC ist, wird der aktuelle Rasterabstand auf den Wert der aktuellen Nebelkoordinate gesetzt. Ansonsten wird der Rasterabstand auf 0 gesetzt.

Die aktuelle Rasterposition braucht sechs einfachgenaue Fliesskomma-Werte für ihre xw, yw und zw Fensterkoordinaten, ihre wc Klipkoordinate, ihren Rasterabstand (als Nebelkoordinate im Rasterprozess genutzt), ein einfaches Gültigkeitsbit, vier Fliesskoma-Werte um die aktuelle RGBA-Farbe zu speichern, vier Fliesskomma-Werte um die aktuelle RGBA-Zweitfarbe zu speichern, ein Fliesskomma-Wert um den aktuellen Farbindex zu speichern und vier Fliesskomma-Werte für die Texturkoordinaten jeder einzelnen Textureinheit. Im Anfangszustand sind die Koordinaten und Texturkoordinaten alle (0, 0, 0, 1), der Abstand im Augenkoordinatensystem ist 0, die Nebelkoordinate ist 0, das Gültigkeitsbit ist gesetzt, die zugeordnete RGBA-Farbe ist (1, 1, 1, 1), die zugeordnete RGBA-Zweitfarbe ist (0, 0, 0, 0) (bzw. ab OpenGL Version 2.0 (0, 0, 0, 1)) und die zugeordnete Farbindexfarbe ist 1. Im RGBA-Modus hat der zugeordnete Farbindex immer seinen Anfangswert; im Farbindex-Modus behalten die RGBA-Farbe und Zweitfarbe immer ihre Anfangswerte.

Hinweise

glWindowPos ist erst ab OpenGL-Version 1.4 oder höher verfügbar.

Wenn das Flag GL_CURRENT_RASTER_POSITION_VALID nicht gesetzt ist, also die aktuelle Rasterposition ungültig ist, werden sämtliche Zeichenbefehle ignoriert, die eine Rasterposition benötigen.

Ein Aufruf von glDrawElements hinterläßt eventuell eine nicht bestimmte Farbe bzw. Index. Wird glWindowPos aufgerufen, während die aktuelle Farbe bzw. der Index unbestimmt sind, so ist die aktuelle Rasterfarbe bzw. der Rasterindex undefiniert.

Mit glWindowPos ist es nun möglich, 2D-Rendering einfacher zu gestalten. Zum einen wird mit diesem einen Aufruf folgende Sequenz an OpenGL-Befehlen ersetzt :

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, (GLfloat) width, 0.0, (GLfloat) height);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

, und zum anderen müssen Texturierung und Beleuchtung nicht mehr explizit abgeschaltet werden, um z.B. 2D-Text auf den Bildschirm zu rendern.

Änderungen

Folgende Erweiterungen hat die Funktion erfahren:

Ab OpenGL-Version 2.0

Auch Transformationsbefehle (z.B. gesetzt mit glScale, glTranslate und glRotate) wirken sich nicht mehr auf die mit glWindowPos gesetzte Rasterposition aus.

Fehlermeldungen

GL_INVALID_OPERATION
glWindowPos wurde innerhalb eines glBegin-glEnd Blocks aufgerufen.

Zugehörige Wertrückgaben

glGet mit Token GL_CURRENT_RASTER_POSITION
glGet mit Token GL_CURRENT_RASTER_POSITION_VALID
glGet mit Token GL_CURRENT_RASTER_DISTANCE
glGet mit Token GL_CURRENT_RASTER_COLOR
glGet mit Token GL_CURRENT_RASTER_INDEX
glGet mit Token GL_CURRENT_RASTER_TEXTURE_COORDS

Siehe auch

glColor, glDepthRange, glFogCoord, glIndex, glRasterPos, glSecondaryColor, glTexCoord