glNormal: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (GlNormal wurde nach glNormal verschoben)
K (Kategorisierung, Wikisyntax für Tabelle)
 
(6 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= glNormal =
 
= glNormal =
  
<br>
+
 
 +
 
 
== Name ==
 
== Name ==
 
'''glNormal''' - setzt die aktuell gültige Normale.
 
'''glNormal''' - setzt die aktuell gültige Normale.
<br>
+
 
 +
 
 +
 
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
  procedure '''glNormal3b'''(''nx'': TGLbyte; ''ny'': TGLbyte; ''nz'': TGLbyte);<br>
+
  procedure '''glNormal3b'''(''nx'': TGLbyte; ''ny'': TGLbyte; ''nz'': TGLbyte);
  procedure '''glNormal3d'''(''nx'': TGLdouble; ''ny'': TGLdouble; ''nz'': TGLdouble);<br>
+
  procedure '''glNormal3d'''(''nx'': TGLdouble; ''ny'': TGLdouble; ''nz'': TGLdouble);
  procedure '''glNormal3f'''(''nx'': TGLfloat; ''ny'': TGLfloat; ''nz'': TGLfloat);<br>
+
  procedure '''glNormal3f'''(''nx'': TGLfloat; ''ny'': TGLfloat; ''nz'': TGLfloat);
  procedure '''glNormal3i'''(''nx'': TGLint; ''ny'': TGLint; ''nz'': TGLint);<br>
+
  procedure '''glNormal3i'''(''nx'': TGLint; ''ny'': TGLint; ''nz'': TGLint);
  procedure '''glNormal3s'''(''nx'': TGLshort; ''ny'': TGLshort; ''nz'': TGLshort);<br>
+
  procedure '''glNormal3s'''(''nx'': TGLshort; ''ny'': TGLshort; ''nz'': TGLshort);
 
   
 
   
  procedure '''glNormal3bv'''(const ''v'': PGLbyte);<br>
+
  procedure '''glNormal3bv'''(const ''v'': PGLbyte);
  procedure '''glNormal3dv'''(const ''v'': PGLdouble);<br>   
+
  procedure '''glNormal3dv'''(const ''v'': PGLdouble);
  procedure '''glNormal3fv'''(const ''v'': PGLfloat);<br>
+
  procedure '''glNormal3fv'''(const ''v'': PGLfloat);
  procedure '''glNormal3iv'''(const ''v'': PGLint);<br>
+
  procedure '''glNormal3iv'''(const ''v'': PGLint);
  procedure '''glNormal3sv'''(const ''v'': PGLshort);<br>
+
  procedure '''glNormal3sv'''(const ''v'': PGLshort);
 +
 
 +
 
  
<br>
 
  
 
== Parameter ==
 
== Parameter ==
 
Version mit 3 Einzelparametern (glNormal3*) :
 
Version mit 3 Einzelparametern (glNormal3*) :
<table border=1 rules=all>
+
{| border="1" rules="all"
<tr>
+
! ''nx'', ''ny'', ''nz''
<td>''nx'', ''ny'', ''nz''</td>
+
| Geben die x, y und z Koordinaten der neuen Normale an.
<td>Geben die x, y und z Koordinaten der neuen Normale an.</td>
+
|}
</tr>
 
</table>
 
  
 
Version mit Parameterfeld (glNormal3*v) :
 
Version mit Parameterfeld (glNormal3*v) :
<table border=1 rules=all>
+
{| border="1" rules="all"
<tr>
+
! ''v''
<td>''v''</td>
+
| ''v'' ist ein Zeiger auf ein Feld welches 3 Werte enthält. Diese 3 Werte stellen die x, y und z-Koordinaten der neuen Normale dar.
<td>''v'' ist ein Zeiger auf ein Feld welches 3 Werte enthält. Diese 3 Werte stellen die x, y und z-Koordinaten der neuen Normale dar.</td>
+
|}
</tr>
 
</table>
 
  
 
Initialisiert ist die Normale mit den Werten (0,0,1).
 
Initialisiert ist die Normale mit den Werten (0,0,1).
  
<br>
+
 
 +
 
 
== Beschreibung ==  
 
== Beschreibung ==  
Die aktuelle Normale wird immer dann auf die Übergebenen Koordinaten ausgerichtet, wenn '''glNormal''' aufgerufen wird. <br>
+
Die aktuelle Normale wird immer dann auf die übergebenen Koordinaten ausgerichtet, wenn '''glNormal''' aufgerufen wird.
Parameter in Byte-, Short- oder Integer-Typen werden so in Fließkommazahlen umgerechnet, dass die kleinstmögliche Zahl des Paramtertyps zu -1.0 und die größtmögliche Zahl zu 1.0 wird. <br>
+
 
 +
Parameter in Byte-, Short- oder Integer-Typen werden so in Fließkommazahlen umgerechnet, dass die kleinstmögliche Zahl des Paramtertyps zu -1.0 und die größtmögliche Zahl zu 1.0 wird.
 +
 
 +
 
 +
[[Datei:Dglwiki_glnormal.jpg]]
 +
 
 +
Dieses Bild zeigt auf der linken Seite (harte) Normalen, die per Fläche gesetzt wurden, während auf der rechten Seite (weiche) Normalen zu sehen sind, die für jeden Eckpunkt gesetzt wurden und vorher im 3D Modeller über den Mesh hinweg gemittelt wurden ("weiche" Normalen). Visualisiert wurde dies mit Hilfe eines [[Shader|Shaders]]. Wie zu erkennen ist, werden hier die XYZ-Koordinaten der passenden Normalen auf die RGB-Werte projeziert, so wird also aus einer Normalen, die nach oben zeigt (0, 1, 0), ein grüner Pixel.
 +
 
 +
 
  
<br>
 
 
== Hinweise ==
 
== Hinweise ==
 
* Normalisierte Normalen
 
* Normalisierte Normalen
- Normale, die mit '''glNormal''' gesetzt werden, müssen keine Einheitslänge haben. (||n|| <> 1)
+
** Normale, die mit '''glNormal''' gesetzt werden, müssen keine Einheitslänge haben. (||n|| <> 1)
- Wenn Normalisierung aktiviert wurde, wird die Normale nach der Transformation normalisiert.
+
** Wenn Normalisierung aktiviert wurde, wird die Normale nach der Transformation normalisiert.
- Normalisierung kann mittels [[glEnable | glEnable/glDisable]] und dem Argument '''GL_NORMALIZE''' kontrolliert werden.
+
** Normalisierung kann mittels [[glEnable | glEnable/glDisable]] und dem Argument '''GL_NORMALIZE''' kontrolliert werden.
- Standardmäßig ist Normalisierung deaktiviert.
+
** Standardmäßig ist Normalisierung deaktiviert.
* Die Normale kann zu jeder Zeit neu gesetzt werden. So kann '''glNormal''' auch innerhalb von [[glBegin]]-[[glEnd]] Blöcken aufgerufen werden.
+
* Die Normale kann zu jeder Zeit neu gesetzt werden. So kann '''glNormal''' auch innerhalb von [[glBegin]]-[[glEnd]]-Blöcken aufgerufen werden.
 +
 
 +
 
  
<br>
 
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
 
keine
 
keine
  
<br>
+
 
 +
 
 
==  Zugehörige Wertrückgaben ==
 
==  Zugehörige Wertrückgaben ==
[[glGet]] mit Token GL_CURRENT_NORMAL <br>
+
[[glGet]] mit Token [[glGet#GL_CURRENT_NORMAL|'''GL_CURRENT_NORMAL''']]
[[glIsEnabled]] mit GL_NORMALIZE
+
 
 +
[[glIsEnabled]] mit '''GL_NORMALIZE'''
 +
 
 +
[[glIsEnabled]] mit '''GL_RESCALE_NORMAL'''
 +
 
 +
 
  
<br>
 
 
== Siehe auch ==
 
== Siehe auch ==
 
[[glBegin]], [[glColor]], [[glIndex]], [[glTexCoord]], [[glVertex]]
 
[[glBegin]], [[glColor]], [[glIndex]], [[glTexCoord]], [[glVertex]]
Zeile 69: Zeile 83:
  
 
[[Kategorie:GL|Normal]]
 
[[Kategorie:GL|Normal]]
 +
[[Kategorie:GL1.0|Normal]]

Aktuelle Version vom 20. Juli 2011, 02:39 Uhr

glNormal

Name

glNormal - setzt die aktuell gültige Normale.


Delphi-Spezifikation

procedure glNormal3b(nx: TGLbyte; ny: TGLbyte; nz: TGLbyte);
procedure glNormal3d(nx: TGLdouble; ny: TGLdouble; nz: TGLdouble);
procedure glNormal3f(nx: TGLfloat; ny: TGLfloat; nz: TGLfloat);
procedure glNormal3i(nx: TGLint; ny: TGLint; nz: TGLint);
procedure glNormal3s(nx: TGLshort; ny: TGLshort; nz: TGLshort);

procedure glNormal3bv(const v: PGLbyte);
procedure glNormal3dv(const v: PGLdouble);
procedure glNormal3fv(const v: PGLfloat);
procedure glNormal3iv(const v: PGLint);
procedure glNormal3sv(const v: PGLshort);



Parameter

Version mit 3 Einzelparametern (glNormal3*) :

nx, ny, nz Geben die x, y und z Koordinaten der neuen Normale an.

Version mit Parameterfeld (glNormal3*v) :

v v ist ein Zeiger auf ein Feld welches 3 Werte enthält. Diese 3 Werte stellen die x, y und z-Koordinaten der neuen Normale dar.

Initialisiert ist die Normale mit den Werten (0,0,1).


Beschreibung

Die aktuelle Normale wird immer dann auf die übergebenen Koordinaten ausgerichtet, wenn glNormal aufgerufen wird.

Parameter in Byte-, Short- oder Integer-Typen werden so in Fließkommazahlen umgerechnet, dass die kleinstmögliche Zahl des Paramtertyps zu -1.0 und die größtmögliche Zahl zu 1.0 wird.


Dglwiki glnormal.jpg

Dieses Bild zeigt auf der linken Seite (harte) Normalen, die per Fläche gesetzt wurden, während auf der rechten Seite (weiche) Normalen zu sehen sind, die für jeden Eckpunkt gesetzt wurden und vorher im 3D Modeller über den Mesh hinweg gemittelt wurden ("weiche" Normalen). Visualisiert wurde dies mit Hilfe eines Shaders. Wie zu erkennen ist, werden hier die XYZ-Koordinaten der passenden Normalen auf die RGB-Werte projeziert, so wird also aus einer Normalen, die nach oben zeigt (0, 1, 0), ein grüner Pixel.


Hinweise

  • Normalisierte Normalen
    • Normale, die mit glNormal gesetzt werden, müssen keine Einheitslänge haben. (||n|| <> 1)
    • Wenn Normalisierung aktiviert wurde, wird die Normale nach der Transformation normalisiert.
    • Normalisierung kann mittels glEnable/glDisable und dem Argument GL_NORMALIZE kontrolliert werden.
    • Standardmäßig ist Normalisierung deaktiviert.
  • Die Normale kann zu jeder Zeit neu gesetzt werden. So kann glNormal auch innerhalb von glBegin-glEnd-Blöcken aufgerufen werden.


Fehlermeldungen

keine


Zugehörige Wertrückgaben

glGet mit Token GL_CURRENT_NORMAL

glIsEnabled mit GL_NORMALIZE

glIsEnabled mit GL_RESCALE_NORMAL


Siehe auch

glBegin, glColor, glIndex, glTexCoord, glVertex

Hintergrundwissen: Normalen