glTexGen: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Beschreibung)
(Link auf Manual)
 
(10 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 52: Zeile 52:
 
  <td>''params''</td>
 
  <td>''params''</td>
 
  <td>Ist ein Zeiger auf ein Feld mit Texturgenerierungsparameter. <br>
 
  <td>Ist ein Zeiger auf ein Feld mit Texturgenerierungsparameter. <br>
Wenn ''pname'' '''GL_TEXTURE_GEN_MODE''' ist, muss das Feld eine einzelne symbolische Konstante enthälten. Diese kann '''GL_OBJECT_LINEAR, GL_EYE_LINEAR,''' oder '''GL_SPHERE_MAP''' sein.<br>
+
Wenn ''pname'' '''GL_TEXTURE_GEN_MODE''' ist, muss das Feld eine einzelne symbolische Konstante enthalten. Diese kann '''GL_OBJECT_LINEAR, GL_EYE_LINEAR,''' oder '''GL_SPHERE_MAP''' sein.<br>
 
In allen anderen Fällen enthält das Feld die Koeffizienten für die Texturgenerierungsfunktion die mit '''pname''' ausgewählt wurde.</td>
 
In allen anderen Fällen enthält das Feld die Koeffizienten für die Texturgenerierungsfunktion die mit '''pname''' ausgewählt wurde.</td>
 
</tr>
 
</tr>
Zeile 58: Zeile 58:
  
 
<br>
 
<br>
 +
 
== Beschreibung ==  
 
== Beschreibung ==  
Die glTexGen Funktion wählt eine Texturkoordinatengenerierungsfunktion oder beliefert eine dieser Funktionen mit Koeffizienten.<br>
+
Die '''glTexGen''' Funktion wählt eine Texturkoordinatengenerierungsfunktion oder beliefert eine dieser Funktionen mit Koeffizienten.<br>
 +
 
 
''coord'' bezeichnet eine der vier Texturkoordinaten (s,t,r,q) und kann einen der 4 folgenden symbolischen Werte annehmen: '''GL_S, GL_T, GL_R''' oder '''GL_Q'''. <br>
 
''coord'' bezeichnet eine der vier Texturkoordinaten (s,t,r,q) und kann einen der 4 folgenden symbolischen Werte annehmen: '''GL_S, GL_T, GL_R''' oder '''GL_Q'''. <br>
 +
 
''pname'' kann einen der 3 möglichen Werte '''GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE''' oder '''GL_EYE_PLANE''' annehmen.<br>
 
''pname'' kann einen der 3 möglichen Werte '''GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE''' oder '''GL_EYE_PLANE''' annehmen.<br>
 +
 
Wenn ''pname'' '''GL_TEXTURE_GEN_MODE''' zugewiesen wurde, kann man mittels ''params'' den Modus festlegen. Dazu verwendet man einen der 3 symbolischen Werte '''GL_OBJECT_LINEAR, GL_EYE_LINEAR''' bzw. '''GL_SPHERE_MAP'''. <br>
 
Wenn ''pname'' '''GL_TEXTURE_GEN_MODE''' zugewiesen wurde, kann man mittels ''params'' den Modus festlegen. Dazu verwendet man einen der 3 symbolischen Werte '''GL_OBJECT_LINEAR, GL_EYE_LINEAR''' bzw. '''GL_SPHERE_MAP'''. <br>
 +
 
Wenn ''name'' entweder gleich '''GL_OBJECT_PLANE''' oder '''GL_EYE_PLANE''' ist, enthält ''params'' Koeffizienten für die zugehörige Texturgenerierungsfunktion.
 
Wenn ''name'' entweder gleich '''GL_OBJECT_PLANE''' oder '''GL_EYE_PLANE''' ist, enthält ''params'' Koeffizienten für die zugehörige Texturgenerierungsfunktion.
 +
  
 
Wenn die Textur-Generatorfunktion '''GL_OBJECT_LINEAR''' ist, wird die Funktion
 
Wenn die Textur-Generatorfunktion '''GL_OBJECT_LINEAR''' ist, wird die Funktion
  
[[Bild:glTexGen_GL_OBJECT_LINEAR_Formel.png]]
+
[[Bild:GlTexGen_GL_OBJECT_LINEAR_Formel.png]]
  
benutzt, wobei g der berechnete Wert der in ''coord'' angegebenen Koordinate ist, p(1),p(2),p(3),p(4) die vier in ''params'' bereitgestellten Werte sind und x(o),y(o),z(o),w(o) die Objektkoordinaten des Vertex sind. Diese Funktion kann für Terraintexturierung, wobei Normal Null(definiert durch p(1),p(2),p(3),p(4)) als Referenzfläche benutzt wird, verwendet werden.
+
benutzt, wobei  
 +
*g der berechnete Wert der in ''coord'' angegebenen Koordinate ist,  
 +
*p(1),p(2),p(3),p(4) die vier in ''params'' bereitgestellten Werte sind und  
 +
*x(o),y(o),z(o),w(o) die Objektkoordinaten des Vertex sind.  
 +
Diese Funktion kann für Terraintexturierung, wobei Normal Null(definiert durch p(1),p(2),p(3),p(4)) als Referenzfläche benutzt wird, verwendet werden.<br>
 
Die Höhe eines Terrainvertex wird von der '''GL_OBJECT_LINEAR''' Koordinaten-Generatorfunktion als Abstand zu Normal Null berechnet; diese Höhenangabe wird zum Beispiel gerne zur Indezierung eines Texturbildes genutzt, um weissen Schnee auf Bergspitzen und grünes Gras auf die Bergausläufer zu mappen.
 
Die Höhe eines Terrainvertex wird von der '''GL_OBJECT_LINEAR''' Koordinaten-Generatorfunktion als Abstand zu Normal Null berechnet; diese Höhenangabe wird zum Beispiel gerne zur Indezierung eines Texturbildes genutzt, um weissen Schnee auf Bergspitzen und grünes Gras auf die Bergausläufer zu mappen.
 +
 +
  
 
Wenn die Textur-Generatorfunktion '''GL_EYE_LINEAR''' ist, wird die Funktion
 
Wenn die Textur-Generatorfunktion '''GL_EYE_LINEAR''' ist, wird die Funktion
  
[[Bild:glTexGen_GL_OBJECT_EYE_LINEAR_Formel1.png]]
+
[[Bild:GlTexGen_GL_OBJECT_EYE_LINEAR_Formel1.png]]
  
 
benutzt, wobei
 
benutzt, wobei
  
[[Bild:glTexGen_GL_OBJECT_EYE_LINEAR_Formel2.png]]
+
[[Bild:GlTexGen_GL_OBJECT_EYE_LINEAR_Formel2.png]]und
 
+
und x (e) , y (e) , z (e) , w (e) die Eye-Koordinaten des Vertex sind, p (1) , p (2) , p (3) , p (4) die in ''params'' bereitgestellten Werte sind und M die Modelviewmatrix zum Zeitpunkt des '''glTexGen'''-Aufrufs ist. Wenn M schlecht zusammengesetzt oder [http://www.math.unizh.ch/fachverein/forum/detail.jsp?FORUM=120 Singulär] ist, können die Texturkoordinaten, die von der resultierenden Funktion berechnet werden, ungenau oder undefiniert sein.
+
*x (e) , y (e) , z (e) , w (e) die Eye-Koordinaten des Vertex sind,  
 +
*p (1) , p (2) , p (3) , p (4) die in ''params'' bereitgestellten Werte sind und  
 +
*M die Modelviewmatrix zum Zeitpunkt des '''glTexGen'''-Aufrufs ist.  
 +
Wenn M schlecht zusammengesetzt oder [http://www.math.unizh.ch/fachverein/forum/detail.jsp?FORUM=120 singulär] ist, können die Texturkoordinaten, die von der resultierenden Funktion berechnet werden, ungenau oder undefiniert sein.<br>
 
Man beachte dass die Werte in ''params'' eine Referenzfläche in Eye-Koordinaten definieren. Die Modelview-Matrix die auf sie angewendet wird muss nicht die selbe sein, die bei der Transformation der Polygonvertices wirkt. Diese Funktion stellt ein Feld von Texturkoordinaten bereit, die dynamische Konturlinien auf sich bewegenden Objekten hervorrufen kann.<br><br>
 
Man beachte dass die Werte in ''params'' eine Referenzfläche in Eye-Koordinaten definieren. Die Modelview-Matrix die auf sie angewendet wird muss nicht die selbe sein, die bei der Transformation der Polygonvertices wirkt. Diese Funktion stellt ein Feld von Texturkoordinaten bereit, die dynamische Konturlinien auf sich bewegenden Objekten hervorrufen kann.<br><br>
Wenn ''pname'' '''GL_SPHERE_MAP''' und ''coord'' entweder '''GL_S''' oder '''GL_T''' ist, werden die s und t Texturkoordinaten wie folgend generiert: Es sei u der Einheitsvektor der vom Ursprung zum Polygonvertex(in Eye-Koordinaten) zeigt; n¢ sei die aktuelle Normale in Eye-Koordinaten transformiert. f =(f (x ) f (y ) f (z) )T sei der Reflektionsvektor so dass
 
 
[[Bild:glTexGen_GL_SPHERE_MAP_Formel1.png]]
 
  
Schließlich sei<br>
+
Wenn ''pname'' '''GL_SPHERE_MAP''' und ''coord'' entweder '''GL_S''' oder '''GL_T''' ist, werden die s und t Texturkoordinaten wie folgend generiert:
 +
*Es sei '''u''' ein Einheitsvektor der vom Koordinatenursprung zum Polygonvertex(in Eye-Koordinaten) zeigt (Ortsvektor).
 +
*'''<nowiki>n'</nowiki>''' sei die aktuelle Normale in Eye-Koordinaten transformiert.
 +
*'''f''' =(f (x ) f (y ) f (z) )T sei der Reflektionsvektor.
 +
So dass [[Bild:GlTexGen_GL_SPHERE_MAP_Formel1.png]] ist.
  
[[Bild:glTexGen_GL_SPHERE_MAP_Formel2.png]]<br>
+
Schließlich sei [[Bild:GlTexGen_m.png]]<br>
  
dann sind die Werte, die auf der i und t Texturkoordinaten zugewiesen werden<br>
+
dann sind die Werte, welche der i und t Texturkoordinate zugewiesen werden<br>
 +
[[Bild:GlTexGen_GL_SPHERE_MAP_Formel2.png]]<br>
 +
[[Bild:GlTexGen_GL_SPHERE_MAP_Formel3.png]]
  
[[Bild:glTexGen_GL_SPHERE_MAP_Formel3.png]]
 
  
 
Eine Texturgenerierungsfunktion wird mittels [[glEnable]]/[[glDisable]] und den Texturkoordinatennamen ('''GL_TEXTURE_GEN_S, GL_TEXTURE_GEN_T, GL_TEXTURE_GEN_R''' bzw. '''GL_TEXTURE_GEN_Q''') aktiviert bzw. deaktiviert.
 
Eine Texturgenerierungsfunktion wird mittels [[glEnable]]/[[glDisable]] und den Texturkoordinatennamen ('''GL_TEXTURE_GEN_S, GL_TEXTURE_GEN_T, GL_TEXTURE_GEN_R''' bzw. '''GL_TEXTURE_GEN_Q''') aktiviert bzw. deaktiviert.
Zeile 110: Zeile 127:
 
<br>
 
<br>
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
'''GL_INVALID_ENUM''' wird generiert wenn ''coord'' oder ''pname'' ungültige Werte übergeben werden oder wenn ''pname'' '''GL_TEXTURE_GEN_MODE''' ist und ''params'' keinen gültigen Wert enthält.<br>
+
'''GL_INVALID_ENUM''' wird generiert wenn  
'''GL_INVALID_ENUM''' wird generiert wenn gleichzeitig ''pname'' '''GL_TEXTURE_GEN_MODE''', ''params'' '''GL_SPHERE_MAP''' und ''coord'' entweder '''GL_R''' oder '''GL_Q''' ist.<br>
+
#''coord'' oder ''pname'' ungültige Werte übergeben werden oder  
 +
#wenn ''pname'' '''GL_TEXTURE_GEN_MODE''' ist und ''params'' keinen gültigen Wert enthält.<br>
 +
'''GL_INVALID_ENUM''' wird generiert wenn gleichzeitig ''pname'' = '''GL_TEXTURE_GEN_MODE''', ''params'' = '''GL_SPHERE_MAP''' und ''coord'' entweder '''GL_R''' oder '''GL_Q''' ist.<br>
 
'''GL_INVALID_OPERATION''' wird generiert wenn '''glTexGen''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird.
 
'''GL_INVALID_OPERATION''' wird generiert wenn '''glTexGen''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird.
  
 
<br>
 
<br>
 +
 
==  Zugehörige Wertrückgaben ==
 
==  Zugehörige Wertrückgaben ==
 
[[glGetTexGen]]<br>
 
[[glGetTexGen]]<br>
Zeile 123: Zeile 143:
  
 
<br>
 
<br>
 +
 +
== Links ==
 +
http://www.opengl.org/sdk/docs/man/xhtml/glTexGen.xml<br>
  
 
== Siehe auch ==
 
== Siehe auch ==
Zeile 128: Zeile 151:
  
 
[[Kategorie:GL|TexGen]]
 
[[Kategorie:GL|TexGen]]
 +
[[Kategorie:GL1.0]]

Aktuelle Version vom 17. November 2009, 11:42 Uhr

glTexGen


Name

glTexGen Funktionen - kontrollieren die Generierung der Texturkoordinaten.


Delphi-Spezifikation

procedure glTexGend(coord: TGLenum; pname: TGLenum; param: TGLdouble);
procedure glTexGenf(coord: TGLenum; pname: TGLenum; param: TGLfloat);
procedure glTexGeni(coord: TGLenum; pname: TGLenum; param: TGLint);


Parameter

coord Bestimmt die Texturkoordinate. Muss eine der folgenden sein:
GL_S, GL_T, GL_R, oder GL_Q.
pname Ist der symbolische Name einer Funktion zur Generierung von Texturkoordinaten.
Muss GL_TEXTURE_GEN_MODE sein.
param Ist ein einzelner Texturgenerierungsparameter. Kann GL_OBJECT_LINEAR, GL_EYE_LINEAR, oder GL_SPHERE_MAP sein.


Delphi-Spezifikation

procedure glTexGendv(coord: TGLenum; pname: TGLenum; const params: PGLdouble);
procedure glTexGenfv(coord: TGLenum; pname: TGLenum; const params: PGLfloat);
procedure glTexGeniv(coord: TGLenum; pname: TGLenum; const params: PGLint);


Parameter

coord Bestimmt die Texturkoordinate. Muss eine der folgenden sein:
GL_S, GL_T, GL_R, oder GL_Q.
pname Ist der symbolische Name einer Funktion zur Generierung von Texturkoordinaten oder eines Funktionsparameters.
Muss GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE, oder GL_EYE_PLANE sein.
params Ist ein Zeiger auf ein Feld mit Texturgenerierungsparameter.

Wenn pname GL_TEXTURE_GEN_MODE ist, muss das Feld eine einzelne symbolische Konstante enthalten. Diese kann GL_OBJECT_LINEAR, GL_EYE_LINEAR, oder GL_SPHERE_MAP sein.

In allen anderen Fällen enthält das Feld die Koeffizienten für die Texturgenerierungsfunktion die mit pname ausgewählt wurde.


Beschreibung

Die glTexGen Funktion wählt eine Texturkoordinatengenerierungsfunktion oder beliefert eine dieser Funktionen mit Koeffizienten.

coord bezeichnet eine der vier Texturkoordinaten (s,t,r,q) und kann einen der 4 folgenden symbolischen Werte annehmen: GL_S, GL_T, GL_R oder GL_Q.

pname kann einen der 3 möglichen Werte GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE oder GL_EYE_PLANE annehmen.

Wenn pname GL_TEXTURE_GEN_MODE zugewiesen wurde, kann man mittels params den Modus festlegen. Dazu verwendet man einen der 3 symbolischen Werte GL_OBJECT_LINEAR, GL_EYE_LINEAR bzw. GL_SPHERE_MAP.

Wenn name entweder gleich GL_OBJECT_PLANE oder GL_EYE_PLANE ist, enthält params Koeffizienten für die zugehörige Texturgenerierungsfunktion.


Wenn die Textur-Generatorfunktion GL_OBJECT_LINEAR ist, wird die Funktion

GlTexGen GL OBJECT LINEAR Formel.png

benutzt, wobei

  • g der berechnete Wert der in coord angegebenen Koordinate ist,
  • p(1),p(2),p(3),p(4) die vier in params bereitgestellten Werte sind und
  • x(o),y(o),z(o),w(o) die Objektkoordinaten des Vertex sind.

Diese Funktion kann für Terraintexturierung, wobei Normal Null(definiert durch p(1),p(2),p(3),p(4)) als Referenzfläche benutzt wird, verwendet werden.
Die Höhe eines Terrainvertex wird von der GL_OBJECT_LINEAR Koordinaten-Generatorfunktion als Abstand zu Normal Null berechnet; diese Höhenangabe wird zum Beispiel gerne zur Indezierung eines Texturbildes genutzt, um weissen Schnee auf Bergspitzen und grünes Gras auf die Bergausläufer zu mappen.


Wenn die Textur-Generatorfunktion GL_EYE_LINEAR ist, wird die Funktion

GlTexGen GL OBJECT EYE LINEAR Formel1.png

benutzt, wobei

GlTexGen GL OBJECT EYE LINEAR Formel2.pngund

  • x (e) , y (e) , z (e) , w (e) die Eye-Koordinaten des Vertex sind,
  • p (1) , p (2) , p (3) , p (4) die in params bereitgestellten Werte sind und
  • M die Modelviewmatrix zum Zeitpunkt des glTexGen-Aufrufs ist.

Wenn M schlecht zusammengesetzt oder singulär ist, können die Texturkoordinaten, die von der resultierenden Funktion berechnet werden, ungenau oder undefiniert sein.
Man beachte dass die Werte in params eine Referenzfläche in Eye-Koordinaten definieren. Die Modelview-Matrix die auf sie angewendet wird muss nicht die selbe sein, die bei der Transformation der Polygonvertices wirkt. Diese Funktion stellt ein Feld von Texturkoordinaten bereit, die dynamische Konturlinien auf sich bewegenden Objekten hervorrufen kann.

Wenn pname GL_SPHERE_MAP und coord entweder GL_S oder GL_T ist, werden die s und t Texturkoordinaten wie folgend generiert:

  • Es sei u ein Einheitsvektor der vom Koordinatenursprung zum Polygonvertex(in Eye-Koordinaten) zeigt (Ortsvektor).
  • n' sei die aktuelle Normale in Eye-Koordinaten transformiert.
  • f =(f (x ) f (y ) f (z) )T sei der Reflektionsvektor.

So dass GlTexGen GL SPHERE MAP Formel1.png ist.

Schließlich sei GlTexGen m.png

dann sind die Werte, welche der i und t Texturkoordinate zugewiesen werden
GlTexGen GL SPHERE MAP Formel2.png
GlTexGen GL SPHERE MAP Formel3.png


Eine Texturgenerierungsfunktion wird mittels glEnable/glDisable und den Texturkoordinatennamen (GL_TEXTURE_GEN_S, GL_TEXTURE_GEN_T, GL_TEXTURE_GEN_R bzw. GL_TEXTURE_GEN_Q) aktiviert bzw. deaktiviert. Bei der Aktivierung wird die ausgewählte Texturkoordinate über die zugehörige Generierungsfunktion berechnet.
Ist sie deaktiviert, so bekommen darauffolgende Vertices die vom aktuellen Set der Texturkoordinaten bestimmten Texturkoordinaten.


Hinweise

Der Initialisierungszustand ist folgender:

  1. Alle Texturgenerierungsfunktionen stehen auf GL_EYE_LINEAR und sind deaktiviert.
  2. Beide s Ebenengleichungen stehen auf (1,0,0,0).
  3. Beide t Ebenengleichungen stehen auf (0,1,0,0).
  4. Alle r und q Ebenengleichungen stehen auf (0,0,0,0).


Fehlermeldungen

GL_INVALID_ENUM wird generiert wenn

  1. coord oder pname ungültige Werte übergeben werden oder
  2. wenn pname GL_TEXTURE_GEN_MODE ist und params keinen gültigen Wert enthält.

GL_INVALID_ENUM wird generiert wenn gleichzeitig pname = GL_TEXTURE_GEN_MODE, params = GL_SPHERE_MAP und coord entweder GL_R oder GL_Q ist.
GL_INVALID_OPERATION wird generiert wenn glTexGen innerhalb eines glBegin-glEnd Blocks aufgerufen wird.


Zugehörige Wertrückgaben

glGetTexGen
glIsEnabled mit Token GL_TEXTURE_GEN_S
glIsEnabled mit Token GL_TEXTURE_GEN_T
glIsEnabled mit Token GL_TEXTURE_GEN_R
glIsEnabled mit Token GL_TEXTURE_GEN_Q


Links

http://www.opengl.org/sdk/docs/man/xhtml/glTexGen.xml

Siehe auch

glTexEnv, glTexImage1D, glTexImage2D, glTexParameter