2016-03-29 16 views
0

Für meine opengl Video-Player-Anwendung, ich bin Textur mit Oberfläche gebunden GL_TEXTURE_EXTERNAL_OESLuminance 'y' Wert der Oberflächenbeschaffenheit

Quelle: https://github.com/crossle/MediaPlayerSurface/blob/master/src/me/crossle/demo/surfacetexture/VideoSurfaceView.java

In meinem Fragment-Shader, mag ich Luminanzwert für genommen werden 3x3 Block.

vec2 tex00 = vec2(vTextureCoord.x-xmargin, vTextureCoord.y-ymargin) 
vec4 p00 = texture2D(sTexture, tex00) 

... etc for 3x3 

und dann berechnen Luminanz jedes Texels: das heißt: p00 durch mit vec3 von (0.3,0.59,0.11) Punkt von p00.rgb tun.

Ist es stattdessen möglich, p00.y direkt zu verwenden? Wird es Luminanzwert geben?

Antwort

1

Nein, p00.y ist identisch mit p00.g (oder p00.t). Sie haben verschiedene Möglichkeiten, auf die zweite Komponente (grüner Kanal) Ihres Vektors zuzugreifen. Sie können auf Komponenten wie XYZW, RGBA oder STPQ zugreifen, und es gibt keinen Unterschied zwischen ihnen.

Der einzige Grund, warum Menschen .rgb statt .xyz verwenden, ist es für Menschen einfacher zu lesen.

+0

oh nett. Wenn das wirklich das ist, was er gefragt hat, ist das großartig! Ich hätte nie gedacht, dass y == Luma impliziert werden könnte. – starmole

0

Nein, aber vielleicht nah genug für Ihren Anwendungsfall. Wenn Sie nur y verwenden, werden Sie jedoch einige Fälle verpassen. Ein reines rotes Bild wäre 0. Sie können jedoch alle 9 Samples addieren und ein Punktprodukt auf das Ergebnis anwenden.