glConvolutionFilter: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Beschreibung Convolution-Filter)
K (Bot: konvertiere/korrigiere <BR>)
 
(7 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
  
 
== Name ==
 
== Name ==
'''glConvolutionFilter''' - Legt einen Convolution-Filter fest.
+
'''glConvolutionFilter''' - Legt einen [[Convolution-Filter]] fest.
 +
 
 +
 
  
<br>
 
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
 
  procedure '''glConvolutionFilter1D'''(''target'': TGLenum; ''internalformat'' : TGLenum;  
 
  procedure '''glConvolutionFilter1D'''(''target'': TGLenum; ''internalformat'' : TGLenum;  
Zeile 23: Zeile 24:
 
|-
 
|-
 
! ''internalformat''  
 
! ''internalformat''  
| [[Pixel Formate intern|Internes Format der Pixel]], auf die der Filter angewendet wird. Nicht akzeptiert werden die Parameter '''GL_DEPTH_COMPONENT16''', '''GL_DEPTH_COMPONENT24''' und '''GL_DEPTH_COMPONENT32'''.
+
| [[internes Pixelformat|Internes Format der Pixel]], auf die der Filter angewendet wird. Erlaubt sind die Werte 1, 2, 3 und 4 oder folgende Parameter : '''GL_ALPHA, GL_ALPHA4, GL_ALPHA8, GL_ALPHA12, GL_ALPHA16, GL_LUMINANCE, GL_LUMINANCE4, GL_LUMINANCE8, GL_LUMINANCE12, GL_LUMINANCE16, GL_LUMINANCE_ALPHA, GL_LUMINANCE4_ALPHA4, GL_LUMINANCE6_ALPHA2, GL_LUMINANCE8_ALPHA8, GL_LUMINANCE12_ALPHA4, GL_LUMINANCE12_ALPHA12, GL_LUMINANCE16_ALPHA16, GL_INTENSITY, GL_INTENSITY4, GL_INTENSITY8, GL_INTENSITY12, GL_INTENSITY16, GL_RGB, GL_R3_G3_B2, GL_RGB4, GL_RGB5, GL_RGB8, GL_RGB10, GL_RGB12, GL_RGB16, GL_RGBA, GL_RGBA2, GL_RGBA4, GL_RGB5_A1, GL_RGBA8, GL_RGB10_A2, GL_RGBA12''' und '''GL_RGBA16'''.
 
|-
 
|-
 
! ''width''  
 
! ''width''  
Zeile 32: Zeile 33:
 
|-
 
|-
 
! ''format''  
 
! ''format''  
| [[Pixel Formate|Pixelformat]] des Filterkernels. Nicht akzeptiert werden die Parameter '''GL_COLOR_INDEX''', '''GL_STENCIL_INDEX''' und '''GL_DEPTH_COMPONENT'''.
+
| [[Pixelformat]] des Filterkernels. Erlaubt sind die Parameter '''GL_RGB, GL_RGBA, GL_BGR, GL_BGRA, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_LUMINANCE''' und '''GL_LUMINANCE_ALPHA'''.
 
|-
 
|-
 
! ''_type''  
 
! ''_type''  
| [[Datentypen für Pixel|Datentyp]] für Pixelwerte des Filterkernels. Nicht akzeptiert wird der Parameter '''GL_BITMAP'''.
+
| [[Pixeldatentyp|Datentyp]] für Pixelwerte des Filterkernels. Erlaubt sind die Parameter '''GL_UNSIGNED_BYTE, GL_BYTE, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, GL_FLOAT, GL_UNSIGNED_BYTE_3_3_2, GL_UNSIGNED_2_3_3_REV, GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_5_6_5_REV, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_4_4_4_4_REV, GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_SHORT_1_5_5_5_REV, GL_UNSIGNED_INT_8_8_8_8, GL_UNSIGNED_INT_8_8_8_8_REV, GL_UNSIGNED_INT_10_10_10_2''' und '''GL_UNSIGNED_INT_2_10_10_10_REV'''.
 
|-
 
|-
 
! ''image''  
 
! ''image''  
Zeile 41: Zeile 42:
 
|}
 
|}
  
<br>
+
 
 +
 
  
 
== Beschreibung ==  
 
== Beschreibung ==  
Dieser Befehl setzt einen eindimensionalen (mit '''glConvolutionFilter1D''') oder zweidimensionalen (mit '''glConvolutionFilter2D''') sog. ''Convolution-Filter'' (oder auch ''Filterkernel'' genannt), welcher bei den OpenGL-Befehlen : [[glCopyPixels]], [[glDrawPixels]], [[glReadPixels]] und [[glTexImage1D]] bzw. [[glTexImage2D]] angewendet wird.
+
Dieser Befehl setzt einen eindimensionalen (mit '''glConvolutionFilter1D''') oder zweidimensionalen (mit '''glConvolutionFilter2D''') sog. [[Convolution-Filter]] (in der Bildverarbeitung auch ''Faltungskern'' genannt), welcher bei den OpenGL-Befehlen : [[glCopyPixels]], [[glDrawPixels]], [[glReadPixels]] und [[glTexImage1D]] bzw. [[glTexImage2D]] angewendet wird.
  
=== Convolution-Filter ===
+
Die Funktion erwartet einen Zeiger auf ein Array mit ''width''*''height'' Werten, die denselben Typ haben, wie mit ''_type'' angegeben.
Ein ''Convolution-Filter'' ist ein ein- bzw. zweidimensionales Array, dessen Werte ''Gewichtungen'' darstellen.
 
Bei Ausführung der Filterung wird das Array Pixel für Pixel auf ein Bild bzw. eine Textur anwendet. Dabei werden die Werte im Array mit den Farben des Bildes multipliziert und zusammenaddiert.
 
Ist z.B. ein 3x3-Array als Filterkernel gesetzt, so wird dieser auf jedes Pixel und seine 8 Nachbarpixel um diesen herum angewendet.
 
Damit lassen sich interessante Effekte wie z.B. Kontraste, Schärfung, Weichzeichnen, [[Embossing]] oder [[Glowing]] erzielen.
 
  
 +
=== Auswirkungen auf die RGBA-Komponenten ===
 +
Folgende Tabelle gibt an, wie Pixel eines RGBA-Bildes durch solch einen Filter verändert werden.
 +
R<sub>s</sub>, G<sub>s</sub>, B<sub>s</sub> und A<sub>s</sub> repräsentieren die Farbkomponenten des Bildes. R<sub>f</sub>, G<sub>f</sub>, B<sub>f</sub> und A<sub>f</sub> stehen für die Farbkomponenten eines GL_RGB- bzw. GL_RGBA-Filters, während L<sub>f</sub> den Wert eines GL_LUMINANCE- und I<sub>f</sub> den Wert eines GL_INTENSITY-Filters repräsentiert.
 +
 +
<div align="center">
 +
{| {{Prettytable_B1}}
 +
! Filterformat
 +
! Rot
 +
! Grün
 +
! Blau
 +
! Alpha
 +
|-
 +
| GL_ALPHA
 +
| unverändert
 +
| unverändert
 +
| unverändert
 +
| A<sub>s</sub> * A<sub>f</sub>
 +
|-
 +
| GL_LUMINANCE
 +
| R<sub>s</sub> * L<sub>f</sub>
 +
| G<sub>s</sub> * L<sub>f</sub>
 +
| B<sub>s</sub> * L<sub>f</sub>
 +
| unverändert
 +
|-
 +
| GL_LUMINANCE_ALPHA
 +
| R<sub>s</sub> * L<sub>f</sub>
 +
| G<sub>s</sub> * L<sub>f</sub>
 +
| B<sub>s</sub> * L<sub>f</sub>
 +
| A<sub>s</sub> * A<sub>f</sub>
 +
|-
 +
| GL_INTENSITY
 +
| R<sub>s</sub> * I<sub>f</sub>
 +
| G<sub>s</sub> * I<sub>f</sub>
 +
| B<sub>s</sub> * I<sub>f</sub>
 +
| A<sub>s</sub> * I<sub>f</sub>
 +
|-
 +
| GL_RGB
 +
| R<sub>s</sub> * R<sub>f</sub>
 +
| G<sub>s</sub> * G<sub>f</sub>
 +
| B<sub>s</sub> * B<sub>f</sub>
 +
| unverändert
 +
|-
 +
| GL_RGBA
 +
| R<sub>s</sub> * R<sub>f</sub>
 +
| G<sub>s</sub> * G<sub>f</sub>
 +
| B<sub>s</sub> * B<sub>f</sub>
 +
| A<sub>s</sub> * A<sub>f</sub>
 +
|}
 
<br>
 
<br>
 +
</div>
  
 
== Hinweise ==
 
== Hinweise ==
Um den Convolution-Filter zu aktivieren, muß zusätzlich [[glEnable]](GL_CONVOLUTION_1D) bzw. [[glEnable]](GL_CONVOLUTION_2D) aufgerufen werden.
+
Um den Filter zu aktivieren, muß zusätzlich [[glEnable]](GL_CONVOLUTION_1D) bzw. [[glEnable]](GL_CONVOLUTION_2D) aufgerufen werden.
Die Anwendung des Convolution-Filters kann mit der Funktion [[glConvolutionParameter]] weiterhin beeinflusst werden.
+
Die Anwendung des Filters kann mit der Funktion [[glConvolutionParameter]] weiterhin beeinflusst werden.
 +
 
 +
 
  
<br>
 
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
 
'''GL_INVALID_ENUM''' wird generiert wenn ''target'' nicht '''GL_CONVOLUTION_1D''' oder '''GL_CONVOLUTION_2D''' ist. (entsprechend der benutzten Funktion)<br>
 
'''GL_INVALID_ENUM''' wird generiert wenn ''target'' nicht '''GL_CONVOLUTION_1D''' oder '''GL_CONVOLUTION_2D''' ist. (entsprechend der benutzten Funktion)<br>
Zeile 76: Zeile 124:
 
[[glIsEnabled]] mit dem Token '''GL_CONVOLUTION_1D''' bzw. '''GL_CONVOLUTION_2D'''.
 
[[glIsEnabled]] mit dem Token '''GL_CONVOLUTION_1D''' bzw. '''GL_CONVOLUTION_2D'''.
  
<br>
+
 
 +
 
 
== Siehe auch ==
 
== Siehe auch ==
 
[[glConvolutionParameter]], [[glCopyConvolutionFilter1D]], [[glCopyConvolutionFilter2D]], [[glGetConvolutionFilter]], [[glGetConvolutionParameter]], [[glSeparableFilter2D]]
 
[[glConvolutionParameter]], [[glCopyConvolutionFilter1D]], [[glCopyConvolutionFilter2D]], [[glGetConvolutionFilter]], [[glGetConvolutionParameter]], [[glSeparableFilter2D]]
  
[[Kategorie:GL]]
+
[[Kategorie:GL|ConvolutionFilter]]

Aktuelle Version vom 22. April 2006, 20:18 Uhr

glConvolutionFilter

Name

glConvolutionFilter - Legt einen Convolution-Filter fest.


Delphi-Spezifikation

procedure glConvolutionFilter1D(target: TGLenum; internalformat : TGLenum; 
                                width : TGLsizei; 
                                format : TGLenum; _type : TGLenum; 
                                const image : PGLvoid)

procedure glConvolutionFilter2D(target: TGLenum; internalformat : TGLenum; 
                                width : TGLsizei; height : TGLsizei; 
                                format : TGLenum; _type : TGLenum; 
                                const image : PGLvoid)

Parameter

target Ziel des Filter. Muss für glConvolutionFilter1D als GL_CONVOLUTION_1D und für glConvolutionFilter2D als GL_CONVOLUTION_2D gesetzt sein.
internalformat Internes Format der Pixel, auf die der Filter angewendet wird. Erlaubt sind die Werte 1, 2, 3 und 4 oder folgende Parameter : GL_ALPHA, GL_ALPHA4, GL_ALPHA8, GL_ALPHA12, GL_ALPHA16, GL_LUMINANCE, GL_LUMINANCE4, GL_LUMINANCE8, GL_LUMINANCE12, GL_LUMINANCE16, GL_LUMINANCE_ALPHA, GL_LUMINANCE4_ALPHA4, GL_LUMINANCE6_ALPHA2, GL_LUMINANCE8_ALPHA8, GL_LUMINANCE12_ALPHA4, GL_LUMINANCE12_ALPHA12, GL_LUMINANCE16_ALPHA16, GL_INTENSITY, GL_INTENSITY4, GL_INTENSITY8, GL_INTENSITY12, GL_INTENSITY16, GL_RGB, GL_R3_G3_B2, GL_RGB4, GL_RGB5, GL_RGB8, GL_RGB10, GL_RGB12, GL_RGB16, GL_RGBA, GL_RGBA2, GL_RGBA4, GL_RGB5_A1, GL_RGBA8, GL_RGB10_A2, GL_RGBA12 und GL_RGBA16.
width Breite des Filterkernels
height Höhe des Filterkernels (nur bei glConvolutionFilter2D)
format Pixelformat des Filterkernels. Erlaubt sind die Parameter GL_RGB, GL_RGBA, GL_BGR, GL_BGRA, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_LUMINANCE und GL_LUMINANCE_ALPHA.
_type Datentyp für Pixelwerte des Filterkernels. Erlaubt sind die Parameter GL_UNSIGNED_BYTE, GL_BYTE, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, GL_FLOAT, GL_UNSIGNED_BYTE_3_3_2, GL_UNSIGNED_2_3_3_REV, GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_5_6_5_REV, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_4_4_4_4_REV, GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_SHORT_1_5_5_5_REV, GL_UNSIGNED_INT_8_8_8_8, GL_UNSIGNED_INT_8_8_8_8_REV, GL_UNSIGNED_INT_10_10_10_2 und GL_UNSIGNED_INT_2_10_10_10_REV.
image Zeiger auf die Daten des Filterkernels.



Beschreibung

Dieser Befehl setzt einen eindimensionalen (mit glConvolutionFilter1D) oder zweidimensionalen (mit glConvolutionFilter2D) sog. Convolution-Filter (in der Bildverarbeitung auch Faltungskern genannt), welcher bei den OpenGL-Befehlen : glCopyPixels, glDrawPixels, glReadPixels und glTexImage1D bzw. glTexImage2D angewendet wird.

Die Funktion erwartet einen Zeiger auf ein Array mit width*height Werten, die denselben Typ haben, wie mit _type angegeben.

Auswirkungen auf die RGBA-Komponenten

Folgende Tabelle gibt an, wie Pixel eines RGBA-Bildes durch solch einen Filter verändert werden. Rs, Gs, Bs und As repräsentieren die Farbkomponenten des Bildes. Rf, Gf, Bf und Af stehen für die Farbkomponenten eines GL_RGB- bzw. GL_RGBA-Filters, während Lf den Wert eines GL_LUMINANCE- und If den Wert eines GL_INTENSITY-Filters repräsentiert.

Filterformat Rot Grün Blau Alpha
GL_ALPHA unverändert unverändert unverändert As * Af
GL_LUMINANCE Rs * Lf Gs * Lf Bs * Lf unverändert
GL_LUMINANCE_ALPHA Rs * Lf Gs * Lf Bs * Lf As * Af
GL_INTENSITY Rs * If Gs * If Bs * If As * If
GL_RGB Rs * Rf Gs * Gf Bs * Bf unverändert
GL_RGBA Rs * Rf Gs * Gf Bs * Bf As * Af


Hinweise

Um den Filter zu aktivieren, muß zusätzlich glEnable(GL_CONVOLUTION_1D) bzw. glEnable(GL_CONVOLUTION_2D) aufgerufen werden. Die Anwendung des Filters kann mit der Funktion glConvolutionParameter weiterhin beeinflusst werden.


Fehlermeldungen

GL_INVALID_ENUM wird generiert wenn target nicht GL_CONVOLUTION_1D oder GL_CONVOLUTION_2D ist. (entsprechend der benutzten Funktion)

GL_INVALID_ENUM wird generiert wenn internalformat ungültige Werte übergeben wurden. Akzeptiert werden alle interne Pixelformate außer GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24 und GL_DEPTH_COMPONENT32.

GL_INVALID_ENUM wird generiert wenn format ungültige Werte übergeben wurden. Akzeptiert werden alle Formatangaben außer GL_COLOR_INDEX, GL_STENCIL_INDEX und GL_DEPTH_COMPONENT

GL_INVALID_ENUM wird generiert wenn type keine gültige Typkonstante übergeben wurde. Akzeptiert werden alle Typangaben außer GL_BITMAP.

GL_INVALID_VALUE wird generiert wenn die Parameter width und height kleiner als 0 oder größer als die jeweilig maximal zulässigen Werte sind. Mittels [[glGetCon- volutionParameter]] (mit target GL_CONVOLUTION_2D und Parameter GL_MAX_CONVOLUTION_WIDTH oder GL_MAX_CONVOLUTION_HEIGHT) können diese Werte abgefragt werden.

Zugehörige Wertrückgaben

glGetConvolutionFilter
glIsEnabled mit dem Token GL_CONVOLUTION_1D bzw. GL_CONVOLUTION_2D.


Siehe auch

glConvolutionParameter, glCopyConvolutionFilter1D, glCopyConvolutionFilter2D, glGetConvolutionFilter, glGetConvolutionParameter, glSeparableFilter2D