glSeparableFilter2D
(Mehr Informationen/weitere Artikel) {{{1}}} |
Inhaltsverzeichnis
glSeparableFilter2D
Name
glSeparableFilter2D - Legt einen zweidimensionalen Convolution-Filter gebildet als Produkt aus zwei eindimensionalen Filtern fest.
Delphi-Spezifikation
procedure glSeparableFilter2D(target: TGLenum; internalformat : TGLenum; width : TGLsizei; height : TGLsizei; format : TGLenum; _type : TGLenum; const row : PGLvoid; const column : PGLvoid)
Parameter
target | Ziel des Filters. Für diese Funktion muss GL_SEPARABLE_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 | Anzahl der Werte in der durch row referenzierten Zeile des Pixel-Arrays. (Breite des Faltungskerns) |
height | Anzahl der Werte in der durch colum referenzierten Spalte des Pixel-Arrays. (Höhe des Faltungskerns) |
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. |
row | Zeiger auf ein eindimensionales Datenfeld welches benutzt wird um den Zeilen-Faltungskern zu bilden. |
column | Zeiger auf ein eindimensionales Datenfeld welches benutzt wird um den Spalten-Faltungskern zu bilden. |
Beschreibung
glSeparableFilter2D bildet einen zweidimensionalen Convolution-Filter aus zwei Pixel-Arrays.
Die durch (width, format, _type, row) und (height, format, _type, column) festgelegten Pixel-Arrays werden genauso verarbeitet, als wären sie an glDrawPixels übergeben worden, mit der Ausnahme, dass die Verarbeitung nach der letzten Umwandlung ins RGBA-Format beendet ist.
Danach werden die R, G, B, und A-Komponenten aller Pixel in beiden Arrays durch die vier separablen zweidimensionalen GL_CONVOLUTION_FILTER_SCALE-Parameterwerte skaliert und durch die vier separablen zweidimensionalen GL_CONVOLUTION_FILTER_BIAS-Parameterwerte verschoben. (Die Skalierungs- und Biasparameter werden mit der Funktion glConvolutionParameter, dem Ziel GL_SEPARABLE_2D und den Parametern GL_CONVOLUTION_FILTER_SCALE und GL_CONVOLUTION_FILTER_BIAS gesetzt. Die Parameter selbst sind vierwertige Vektoren, welche auf die Rot-, Grün-, Blau- und Alphakomponenten angewendet werden.) Die R, G, B, und A-Werte werden während des ganzen Prozesses nicht auf den Bereich [0,1] gemapped.
Jeder Pixel wird dann intern in das mit internalformat angegebene Format konvertiert. Diese Konvertierung mappt die Komponentenwerte der Pixel (R, G, B, and A) einfach auf die Werte, welche zum internen Format gehören (Rot, Grün, Blau, Alpha, Helligkeit und Intensität). Das Mapping geschieht folgendermassen:
Internes Format | Rot | Grün | Blau | Alpha | Helligkeit | Intensität |
---|---|---|---|---|---|---|
GL_LUMINANCE | R | |||||
GL_LUMINANCE_ALPHA | A | R | ||||
GL_INTENSITY | R | |||||
GL_RGB | R | G | B | |||
GL_RGBA | R | G | B | A |
Die Rot-, Grün-, Blau-, Alpha-, Helligkeits-, und/oder Intensitäts-Komponenten der resultierenden Pixel werden im Fließkomma-Format gespeichert.
Sie bilden zwei eindimensionale Filterkern-Bilder. Das Zeilenbild wird durch die Koordinate i indiziert, welche bei 0 startet und sich von links nach rechts erhöht. Jeder Punkt des Zeilenbildes wird vom Element i der Zeile bestimmt. Die Spalte wird durch die Koordinate j indiziert, welche bei 0 startet und sich von unten nach oben erhöht. Jeder Punkt des Spaltenbildes wird vom Element j der Zeile bestimmt.
Beachte, dass, nachdem eine Convolution-Operation ausgeführt wird, die resultierenden Farbkomponenten auch durch ihre entsprechenden GL_POST_CONVOLUTION_c_SCALE-Parameter skaliert und ihre GL_POST_CONVOLUTION_c_BIAS-Parameter verschoben werden (wobei c die Werte RED, GREEN, BLUE und ALPHA annimmt). Diese Parameter werden durch die Funktion glPixelTransfer gesetzt.
Folgendes Beispiel veranschaulicht, wie ein zweidimensionaler Convolution-Filter aus zwei getrennten eindimensionalen Pixel-Arrays durch Multiplikation gebildet wird : werden z.B. für column die drei Werte -1, 2, -1 und für row die drei Werte 1, 2, 1 übergeben, so wird daraus das folgende Array berechnet :
Hinweise
Die Funktion glSeparableFilter2D ist erst ab OpenGL Version 1.2 verfügbar.
glSeparableFilter2D ist nur verfügbar, falls GL_ARB_imaging beim Aufruf der Funktion glGetString mit dem Argument GL_EXTENSIONS zurückgegeben wird.
Um den Filter zu aktivieren, muß zusätzlich glEnable(GL_SEPARABLE_2D) aufgerufen werden.
Mit glSeparable2D gesetzte Filter sind im Allgemeinen effizienter als entsprechende Filter, die mit glConvolutionFilter2D definiert werden.
Fehlermeldungen
GL_INVALID_ENUM wird generiert, wenn target nicht GL_SEPARABLE_2D ist.
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 glGetConvolutionParameter (mit target GL_SEPARABLE_2D und Parameter GL_MAX_CONVOLUTION_WIDTH oder GL_MAX_CONVOLUTION_HEIGHT) können diese Werte abgefragt werden.
GL_INVALID_OPERATION wird generiert, wenn glSeparableFilter2D zwischen dem Aufruf von glBegin und glEnd ausgeführt wird.
GL_INVALID_OPERATION wird generiert, falls _type eine der folgenden symbolischen Konstanten ist : GL_UNSIGNED_BYTE_3_3_2, GL_UNSIGNED_BYTE_2_3_3_REV, GL_UNSIGNED_SHORT_5_6_5, oder GL_UNSIGNED_SHORT_5_6_5_REV und das Format nicht GL_RGB ist.
GL_INVALID_OPERATION wird generiert, falls type eine der folgenden symbolischen Konstanten ist : 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 oder GL_UNSIGNED_INT_2_10_10_10_REV und das Format weder GL_RGBA noch GL_BGRA ist.
Zugehörige Wertrückgaben
glGetSeparableFilter mit dem target GL_SEPARABLE_2D.
glGetConvolutionParameter
glIsEnabled mit dem Token GL_SEPARABLE_2D.
Siehe auch
glConvolutionFilter1D, glConvolutionFilter2D, glConvolutionParameter, glGetConvolutionParameter, glGetSeparableFilter, glPixelTransfer