glCopyConvolutionFilter: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(neu erstellt)
 
(an manpages angepasst)
Zeile 3: Zeile 3:
 
<br>
 
<br>
 
== Name ==
 
== Name ==
'''glCopyConvolutionFilter''' - Lädt einen [[Convolution-Filter]] aus dem [[Framebuffer]].
+
'''glCopyConvolutionFilter''' - Kopiert Pixel in einen ein- oder zweidimensionalen [[Convolution-Filter]].
  
 
<br>
 
<br>
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
  
  procedure '''glConvolutionFilter1D'''(''target'' : TGLenum; ''internalformat'' : TGLenum; ''x'' : TGLint;
+
  procedure '''glConvolutionFilter1D'''(''target'' : TGLenum; ''internalformat'' : TGLenum;
                                ''y'' : TGLint; ''width'' : TGLsizei)
+
                                ''x'' : TGLint; ''y'' : TGLint; ''width'' : TGLsizei)
 
   
 
   
  procedure '''glConvolutionFilter2D'''(''target'' : TGLenum; ''internalformat'' : TGLenum; ''x'' : TGLint;
+
  procedure '''glConvolutionFilter2D'''(''target'' : TGLenum; ''internalformat'' : TGLenum;
                                ''y'' : TGLint; ''width'' : TGLsizei, ''height'' : TGLsizei)
+
                                ''x'' : TGLint; ''y'' : TGLint;
 +
                                ''width'' : TGLsizei, ''height'' : TGLsizei)
 
<br>
 
<br>
  
Zeile 39: Zeile 40:
  
 
== Beschreibung ==  
 
== Beschreibung ==  
Dieser Befehl kopiert einen eindimensionalen (mit '''glCopyConvolutionFilter1D''') oder zweidimensionalen (mit '''glCopyConvolutionFilter2D''') [[Convolution-Filter]] aus dem aktuellen Framebuffer, definiert mit '''GL_READ_BUFFER'''.  
+
'''glCopyConvolutionFilter2D''' ('''glCopyConvolutionFilter1D''') definiert einen zweidimensionalen (eindimensionalen) Convolution-Faltungskern mit Pixel aus dem aktuellen '''GL_READ_BUFFER''' (nicht aus dem Hauptspeicher, so wie es bei [[glConvolutionFilter2D]] der Fall ist).
  
Das Bildschirm-bezogene Pixelrechteck mit der unteren linken Ecke bei (x, y), der Länge von ''width'' und der Höhe von ''height'' definiert den Filterbereich.  
+
Das am Bildschirm ausgerichtete Pixel-Rechteck mit der unteren, linken Ecke bei (''x'', ''y''), der Breite ''width'' und der Höhe ''height'' (bei '''glCopyConvolutionFilter1D''' ist die Höhe 1) wird benutzt, um einen Convolution-Filter zu definieren. Falls irgendeiner der Pixel in diesem Bereich ausserhalb des Fensters ist, welches mit dem [[Renderkontext]] assoziert wird, sind die Werte geltend für diese Pixel undefiniert.
  
''internalformat'' gibt das interne Format des Filters vor.
+
Die Pixel in dem Rechteck werden genauso verarbeitet, als wenn [[glReadPixels]] mit dem gesetzten Format RGBA aufgerufen wäre, nur dass der Prozess vor der letzten Konvertierung gestoppt wird. Danach werden die R, G, B, und A-Komponenten aller Pixel in beiden Arrays durch die vier 2D- bzw. 1D-'''GL_CONVOLUTION_FILTER_SCALE'''-Parameterwerte skaliert und durch die vier 2D- bzw. 1D-'''GL_CONVOLUTION_FILTER_BIAS'''-Parameterwerte verschoben. (Die Skalierungs- und Biasparameter werden mit der Funktion [[glConvolutionParameter]], dem Ziel '''GL_CONVOLUTION_2D'''('''GL_CONVOLUTION_1D''') 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] gemappt.
Wird '''GL_LUMINANCE''' oder '''GL_INTENSITY''' angegeben, so wird die rote Pixel-Komponente benutzt, um den Wert für den Convolution-Filter zu bestimmen.
 
  
Die Pixel in dem Rechteck werden genau so bearbeitet, wie wenn [[glCopyPixels]] aufgerufen worden wäre, nur dass der Vorgang vor der finalen Konvertierung gestoppt wird. An diesem Punkt werden alle Pixel-Werte an den [0, 1]-Bereich angepasst und dann in das interne Filterformat konvertiert, um im Filter-Array gespeichert zu werden.
+
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:
  
Wenn sich einige der Pixel, die in der Zeile des aktuellen '''GL_READ_BUFFER''' angegeben werden, außerhalb des Bildschirms befinden, sind die Werte für diese Pixel undefiniert.
+
<div align="center">
 +
{| {{Prettytable_B1}}
 +
! 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
 +
|
 +
|
 +
|}
 +
</div>
 +
 
 +
Die Rot-, Grün-, Blau-, Alpha-, Helligkeits-, und/oder Intensitäts-Komponenten der resultierenden Pixel werden im Fließkomma-Format gespeichert.
 +
 
 +
Die Pixelreihenfolge ist so, dass die tiefen x-Bildschirmkoordinaten den tiefen i Filterbild-Koordinaten entsprechen, und die tiefen y-Bildschirmkoordinaten den tiefen j Filterbild-Koordinaten entsprechen.
 +
 
 +
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.
  
 
<br>
 
<br>
 
 
== Hinweise ==
 
== Hinweise ==
 
'''glCopyConvolutionFilter1D''' und '''glCopyConvolutionFilter2D''' sind ab OpenGL Version 1.2 verfügbar.
 
'''glCopyConvolutionFilter1D''' und '''glCopyConvolutionFilter2D''' sind ab OpenGL Version 1.2 verfügbar.
 +
 +
'''glCopyConvolutionFilter1D''' und '''glCopyConvolutionFilter2D''' sind nur verfügbar, falls '''GL_ARB_imaging''' beim Aufruf der Funktion [[glGetString]] mit dem Argument '''GL_EXTENSIONS''' zurückgegeben wird.
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
Zeile 61: Zeile 118:
 
<br>  
 
<br>  
  
'''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_CONVOLUTION_1D''' und Parameter '''GL_MAX_CONVOLUTION_WIDTH''' oder '''GL_CONVOLUTION_2D''' und Parameter '''GL_MAX_CONVOLUTION_WIDTH''' oder '''GL_MAX_CONVOLUTION_HEIGHT''') können diese Werte abgefragt werden.<br>
+
'''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_CONVOLUTION_1D''' und Parameter '''GL_MAX_CONVOLUTION_WIDTH''' oder '''GL_CONVOLUTION_2D''' und Parameter '''GL_MAX_CONVOLUTION_WIDTH''' oder '''GL_MAX_CONVOLUTION_HEIGHT''') können diese Werte abgefragt werden.<br>
  
 
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glCopyConvolutionFilter1D''' oder '''glCopyConvolutionFilter2D''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird.  
 
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glCopyConvolutionFilter1D''' oder '''glCopyConvolutionFilter2D''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird.  
Zeile 74: Zeile 131:
  
 
== Siehe auch ==
 
== Siehe auch ==
[[glConvolutionFilter1D]], [[glConvolutionFilter2D]], [[glConvolutionParameter]], [[glGetConvolutionFilter]], [[glGetConvolutionParameter]], [[glSeparableFilter2D]]
+
[[glConvolutionFilter1D]], [[glConvolutionFilter2D]], [[glConvolutionParameter]], [[glGetConvolutionFilter]], [[glGetConvolutionParameter]], [[glPixelTransfer]], [[glSeparableFilter2D]]
  
[[Kategorie:GL|CopyConvolutionFilter2D]]
+
[[Kategorie:GL|CopyConvolutionFilter]]

Version vom 10. April 2006, 13:50 Uhr

glCopyConvolutionFilter


Name

glCopyConvolutionFilter - Kopiert Pixel in einen ein- oder zweidimensionalen Convolution-Filter.


Delphi-Spezifikation

procedure glConvolutionFilter1D(target : TGLenum; internalformat : TGLenum;
                                x : TGLint; y : TGLint; width : TGLsizei)

procedure glConvolutionFilter2D(target : TGLenum; internalformat : TGLenum;
                                x : TGLint; y : TGLint;
                                width : TGLsizei, height : TGLsizei)


Parameter

target Gibt den Zielfilter an. Muss für glCopyConvolutionFilter1D als GL_CONVOLUTION_1D und für glCopyConvolutionFilter2D als GL_CONVOLUTION_2D gesetzt sein.
internalformat Format, in das die Daten aus dem Framebuffer konvertiert werden sollen. Möglich Werte sind : 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.
x, y Gibt die Fenster-Koordinaten der linken, unteren Ecke des zu kopierenden Pixel-Rechtecks an.
width Gibt die Breite des zu kopierenden Pixel-Rechtecks an.
height Gibt bei glCopyConvolutionFilter2D die Höhe des zu kopierenden Pixel-Rechtecks an.



Beschreibung

glCopyConvolutionFilter2D (glCopyConvolutionFilter1D) definiert einen zweidimensionalen (eindimensionalen) Convolution-Faltungskern mit Pixel aus dem aktuellen GL_READ_BUFFER (nicht aus dem Hauptspeicher, so wie es bei glConvolutionFilter2D der Fall ist).

Das am Bildschirm ausgerichtete Pixel-Rechteck mit der unteren, linken Ecke bei (x, y), der Breite width und der Höhe height (bei glCopyConvolutionFilter1D ist die Höhe 1) wird benutzt, um einen Convolution-Filter zu definieren. Falls irgendeiner der Pixel in diesem Bereich ausserhalb des Fensters ist, welches mit dem Renderkontext assoziert wird, sind die Werte geltend für diese Pixel undefiniert.

Die Pixel in dem Rechteck werden genauso verarbeitet, als wenn glReadPixels mit dem gesetzten Format RGBA aufgerufen wäre, nur dass der Prozess vor der letzten Konvertierung gestoppt wird. Danach werden die R, G, B, und A-Komponenten aller Pixel in beiden Arrays durch die vier 2D- bzw. 1D-GL_CONVOLUTION_FILTER_SCALE-Parameterwerte skaliert und durch die vier 2D- bzw. 1D-GL_CONVOLUTION_FILTER_BIAS-Parameterwerte verschoben. (Die Skalierungs- und Biasparameter werden mit der Funktion glConvolutionParameter, dem Ziel GL_CONVOLUTION_2D(GL_CONVOLUTION_1D) 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] gemappt.

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.

Die Pixelreihenfolge ist so, dass die tiefen x-Bildschirmkoordinaten den tiefen i Filterbild-Koordinaten entsprechen, und die tiefen y-Bildschirmkoordinaten den tiefen j Filterbild-Koordinaten entsprechen.

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.


Hinweise

glCopyConvolutionFilter1D und glCopyConvolutionFilter2D sind ab OpenGL Version 1.2 verfügbar.

glCopyConvolutionFilter1D und glCopyConvolutionFilter2D sind nur verfügbar, falls GL_ARB_imaging beim Aufruf der Funktion glGetString mit dem Argument GL_EXTENSIONS zurückgegeben wird.

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.

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_CONVOLUTION_1D und Parameter GL_MAX_CONVOLUTION_WIDTH oder GL_CONVOLUTION_2D und Parameter GL_MAX_CONVOLUTION_WIDTH oder GL_MAX_CONVOLUTION_HEIGHT) können diese Werte abgefragt werden.

GL_INVALID_OPERATION wird generiert, wenn glCopyConvolutionFilter1D oder glCopyConvolutionFilter2D innerhalb eines glBegin-glEnd Blocks aufgerufen wird.


Zugehörige Wertrückgaben

glGetConvolutionFilter
glGetConvolutionParameter


Siehe auch

glConvolutionFilter1D, glConvolutionFilter2D, glConvolutionParameter, glGetConvolutionFilter, glGetConvolutionParameter, glPixelTransfer, glSeparableFilter2D