gl.TexGen(coord, pname, param)
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.
#GL_S
, #GL_T
, #GL_R
oder #GL_Q
pname
(siehe oben)#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.
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