表面纹理的亮度 'y' 值
Luminance 'y' value of surface texture
对于我的 opengl 视频播放器应用程序,我使用绑定到 GL_TEXTURE_EXTERNAL_OES
的表面纹理
在我的片段着色器中,我希望为 3x3 块采用亮度值。
vec2 tex00 = vec2(vTextureCoord.x-xmargin, vTextureCoord.y-ymargin)
vec4 p00 = texture2D(sTexture, tex00)
... etc for 3x3
然后计算每个纹素的亮度:即:通过 p00.rgb 的点和 (0.3,0.59,0.11).
的 vec3 来计算 p00
是否可以直接使用 p00.y ?会给出亮度值吗?
不,但对于您的用例来说可能足够接近了。通过只使用 y 你会错过一些情况。纯红色图像将为 0。不过,您可以将所有 9 个样本相加,然后对结果做一个点积。
不,p00.y
与 p00.g
(或 p00.t
)相同。它们是访问矢量的第二个组件(绿色通道)的不同方式。您可以通过 XYZW、RGBA 或 STPQ 访问组件,它们之间没有区别。
人们使用 .rgb
而不是 .xyz
的唯一原因是为了让人们更容易阅读。
对于我的 opengl 视频播放器应用程序,我使用绑定到 GL_TEXTURE_EXTERNAL_OES
的表面纹理在我的片段着色器中,我希望为 3x3 块采用亮度值。
vec2 tex00 = vec2(vTextureCoord.x-xmargin, vTextureCoord.y-ymargin)
vec4 p00 = texture2D(sTexture, tex00)
... etc for 3x3
然后计算每个纹素的亮度:即:通过 p00.rgb 的点和 (0.3,0.59,0.11).
的 vec3 来计算 p00是否可以直接使用 p00.y ?会给出亮度值吗?
不,但对于您的用例来说可能足够接近了。通过只使用 y 你会错过一些情况。纯红色图像将为 0。不过,您可以将所有 9 个样本相加,然后对结果做一个点积。
不,p00.y
与 p00.g
(或 p00.t
)相同。它们是访问矢量的第二个组件(绿色通道)的不同方式。您可以通过 XYZW、RGBA 或 STPQ 访问组件,它们之间没有区别。
人们使用 .rgb
而不是 .xyz
的唯一原因是为了让人们更容易阅读。