表面纹理的亮度'y'值

时间:2016-03-29 09:13:30

标签: opengl-es textures fragment-shader luminance

对于我的opengl视频播放器应用,我使用绑定到GL_TEXTURE_EXTERNAL_OES的表面纹理

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

在我的片段着色器中,我希望亮度值为3x3块。

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

... etc for 3x3

然后计算每个纹素的亮度:即:p00通过p00.rgb的点和vec3为(0.3,0.59,0.11)。

而是可以直接使用p00.y?它会给出亮度值吗?

2 个答案:

答案 0 :(得分:1)

不,p00.yp00.g(或p00.t)相同。它们是访问向量的第二个组件(绿色通道)的不同方法。您可以将组件作为XYZW,RGBA或STPQ访问,它们之间没有区别。

人们使用.rgb代替.xyz的唯一原因是让人们更容易阅读。

答案 1 :(得分:0)

不,但可能足够接近你的用例。通过使用y,你会错过一些案例。纯红色图像为0.您可以将所有9个样本相加,然后对结果执行一个点积。