Bezeichnung
gl.TexGen -- kontrolliert die Erzeugung von Texturkoordinaten
Übersicht
gl.TexGen(coord, pname, param)
Beschreibung
gl.TexGen() wählt eine Texturkoordinatengenerierungs-Funktion aus oder liefert Koeffizienten für eine der Funktionen. coord nennt eine der Texturkoordinaten (s, t, r, q); es muss eines der Symbole #GL_S, #GL_T, #GL_R oder #GL_Q sein. pname muss eine von drei symbolischen Konstanten sein: #GL_TEXTURE_GEN_MODE, #GL_OBJECT_PLANE oder #GL_EYE_PLANE. Wenn pname #GL_TEXTURE_GEN_MODE ist, dann wählt param eine der drei Modi #GL_OBJECT_LINEAR, #GL_EYE_LINEAR oder #GL_SPHERE_MAP aus. Wenn pname entweder #GL_OBJECT_PLANE oder #GL_EYE_PLANE ist, enthält param Koeffizienten für die entsprechende Texturierungsfunktion.

Wenn die Texturerzeugungsfunktion #GL_OBJECT_LINEAR ist, wird die Funktion

 
g = p1x0 + p2y0 + p3z0 + p4w0

verwendet, wobei g der berechnete Wert für die in coord genannte Koordinate ist, p1, p2, p3 und p4 die vier in param gelieferten Werte und x0, y0, z0 und w0 die Objektkoordinaten des Knoten sind. Dieser Befehl kann z.B. verwendet werden, um das Gelände mit Hilfe des Meeresspiegels als Bezugsebene (definiert durch p1, p2, p3 und p4) zu strukturieren. Die Höhe eines Geländepunktes wird durch die Koordinatengenerierung #GL_OBJECT_LINEAR als Abstand vom Meeresspiegel berechnet; diese Höhe kann dann verwendet werden, um das Texturbild zu indizieren, um weißen Schnee auf Gipfeln und grünes Gras auf dessen Ausläufern abzubilden.

Wenn die Texturerzeugungsfunktion #GL_EYE_LINEAR ist, wird die Funktion

 
g = p1'x0 + p2'y0 + p3'z0 + p4'w0

verwendet, wobei

 
(p1' p2' p3' p4') = ( p1 p2 p3 p4) M^-1

und x0, y0, z0 und w0 die Augenkoordinaten des Scheitelpunkts sind, p1, p2, p3 und p4 sind die in param angegebenen Werte und M ist die Modellansichtsmatrix, wenn gl.TexGen() aufgerufen wird. Wenn M schlecht konditioniert oder singulär ist, können die von der resultierenden Funktion erzeugten Texturkoordinaten ungenau oder undefiniert sein.

Beachten Sie, dass die Werte in param eine Bezugsebene in Augenkoordinaten definieren. Die Modellansichtsmatrix, die auf sie angewendet wird, ist möglicherweise nicht die gleiche, die bei der Transformation der Polygonknoten wirksam ist. Dieser Befehl erstellt ein Feld von Texturkoordinaten, das dynamische Konturlinien auf sich bewegenden Objekten erzeugen kann.

Wenn pname #GL_SPHERE_MAP und coord entweder #GL_S oder #GL_T ist, werden s und t Texturkoordinaten wie folgt generiert: u ist dann der Einheitenvektor, der vom Nullpunkt auf den Polygonknoten zeigt (in Augenkoordinaten). n' wird dann die aktuelle Normalität nach der Transformation in Augenkoordinaten sein. Dabei soll f = (fx fy fz)^T der Reflexionsvektor sein, so daß

 
f = u - 2n' n'^Tu

schliesslich m = 2 sqrt(fx^2 + fy^2 + (fz + 1)^2) ist. Dann werden die Werte für die Texturkoordinaten s und t wie folgt zugewiesen

 
s = fx/m + 1/2
t = fy/m + 1/2

Um eine Texturkoordinatengenerierungs-Funktion zu aktivieren oder zu deaktivieren, rufen Sie gl.Enable() oder gl.Disable() auf, mit einem der symbolischen Texturkoordinatennamen (#GL_TEXTURE_GEN_S, #GL_TEXTURE_GEN_T, #GL_TEXTURE_GEN_R oder #GL_TEXTURE_GEN_Q) als Argument. Wenn aktiviert, wird die angegebene Texturkoordinate gemäß der Generierungsfunktion berechnet, die dieser Koordinate zugeordnet ist. Wenn deaktiviert, übernehmen nachfolgende Eckpunkte die angegebene Texturkoordinate aus dem aktuellen Satz von Texturkoordinaten. Zunächst sind alle Funktionen zur Texturerzeugung auf #GL_EYE_LINEAR gesetzt und deaktiviert. Beide s-Ebenengleichungen sind (1, 0, 0, 0), beide t-Ebenengleichungen (0, 1, 0, 0) und alle r- und q-Ebenengleichungen (0, 0, 0, 0).

Weitere Informationen finden Sie in einem OpenGL-Referenzhandbuch.

Eingaben
coord
gibt eine Texturkoordinate an; muss eine der folgenden sein: #GL_S, #GL_T, #GL_R oder #GL_Q
pname
gibt den symbolischen Namen der Texturkoordinaten-Erzeugungsfunktion oder der Funktionsparameter an (siehe oben)
param
Einzelwert oder Tabelle mit Parametern für pname (siehe oben)
Fehler
#GL_INVALID_ENUM wird erzeugt, wenn coord oder pname kein akzeptierter definierter Wert ist oder wenn pname #GL_TEXTURE_GEN_MODE und param kein akzeptierter definierter Wert ist.

#GL_INVALID_ENUM wird erzeugt, wenn pname #GL_TEXTURE_GEN_MODE, param #GL_SPHERE_MAP ist und coord entweder #GL_R oder #GL_Q beinhaltet.

#GL_INVALID_OPERATION wird erzeugt, wenn gl.TexGen() zwischen gl.Begin() und gl.End() ausgeführt wird.

Verbundene get-operationen
gl.GetTexGen()

gl.IsEnabled() mit dem Argument #GL_TEXTURE_GEN_S

gl.IsEnabled() mit dem Argument #GL_TEXTURE_GEN_T

gl.IsEnabled() mit dem Argument #GL_TEXTURE_GEN_R

gl.IsEnabled() mit dem Argument #GL_TEXTURE_GEN_Q


Navigation zeigen