gpt4 book ai didi

opengl-es - Opengl Shader,gl_FragColor的alpha组件是什么?

转载 作者:行者123 更新时间:2023-12-04 07:53:38 28 4
gpt4 key购买 nike

我认为这将是一个简单的答案。
但是我无法通过谷歌搜索找到答案。
这是OpenGLES着色器。我正在使用cocos2d-x引擎。

这是我的片段着色器代码。

precision lowp float;
varying vec2 v_texCoord;
uniform sampler2D u_texture;
uniform vec4 u_lightPosition;

void main()
{
vec4 col=texture2D(u_texture,v_texCoord);

mediump float lightDistance = distance(gl_FragCoord, u_lightPosition);
mediump float alpha = 100.0/lightDistance;
alpha = min(alpha, 1.0);
alpha = max(alpha, 0.0);
col.w = alpha;
//col.a = alpha;


gl_FragColor=col;

}

我只想在某些圆圈区域设置不透明度。因此,我更改了颜色的w值,因为我认为它是纹理像素的Alpha值。但是结果很奇怪。
恐怕不是alpha值。

即使我将值设置为1.0进行测试,整个 Sprite 也会变为亮白色。

它的顶点着色器非常正常,没有附加的特殊要求。

任何想法,请。


更新:作为引用,我附上一些结果图像。

情况1)
col.w = alpha;

情况2)
col.w = 1.0


和应用着色器之前的正常纹理。)

最佳答案

GL ES 2.0 reference card定义:

Variable
mediump vec4 gl_FragColor;

Description
fragment color

Units or coordinate system
RGBA color



它进一步指出:

Vector Components
In addition to array numeric subscript syntax, names of vector components are denoted by a single letter. Components can be swizzled and replicated, e.g.: pos.xx, pos.zy

{x, y, z, w} Use when accessing vectors that represent points or normals

{r, g, b, a} Use when accessing vectors that represent colors

{s, t, p, q} Use when accessing vectors that represent texture coordinates



因此,可以肯定的是,使用 .a会更加惯用,但显然,存储到 .w的是 gl_FragColor的输出alpha。

为了回答您设置为标题的问题,而不是正文中的问题, texture2D返回的值将适合该纹理。如果纹理是 GL_RGBAGL_LUMINANCE_ALPHA或1.0,则为实际存储的值。

因此,您可以正确输出alpha。

如果您的输出alpha没有达到您期望的混合效果,那么您必须将 glBlendFunc设置为意外的内容,可能涉及 GL_CONSTANT_COLOR

关于opengl-es - Opengl Shader,gl_FragColor的alpha组件是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24501570/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com