Jin*_*Heo 8 shader opengl-es glsl cocos2d-x
我认为这将是一个简单的答案.
但我用谷歌搜索找不到答案.
它是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;
}
Run Code Online (Sandbox Code Playgroud)
我只想在某个圆圈区域给出不透明度.所以我改变颜色的w值,因为我认为它是纹素的alpha值.但结果很奇怪.我担心这不是alpha值.
即使我将值设置为1.0进行测试,整个精灵也会变为亮白色.
它的顶点着色器非常正常,没有什么特别的附加.
请问任何想法.
更新:作为参考,我附上一些结果图像.
情况1)
col.w = alpha;
Run Code Online (Sandbox Code Playgroud)
案例2)
col.w = 1.0
Run Code Online (Sandbox Code Playgroud)
应用着色器之前的正常纹理.)
的GL ES 2.0参考卡定义:
变量
mediump vec4 gl_FragColor;描述
片段颜色单位或坐标系
RGBA颜色
它进一步指出:
向量组件
除了数组数字下标语法之外,向量组件的名称由单个字母表示.组件可以被调配和复制,例如:pos.xx,pos.zy{x,y,z,w}访问表示点或法线的向量时使用
{r,g,b,a}访问表示颜色的矢量时使用
{s,t,p,q}访问表示纹理坐标的矢量时使用
所以,当然,使用.a
会更加惯用,但明确的情况是你存储的.w
是输出alpha gl_FragColor
.
要回答您设置为标题而不是正文中的问题的问题,返回的值texture2D
将是该纹理的正确值.任一的实际存储的值,如果所述纹理是GL_RGBA
或GL_LUMINANCE_ALPHA
要不然1.0.
所以你正确输出alpha.
如果您的输出alpha没有您期望的混合效果,那么您必须glBlendFunc
设置为意外的,可能涉及GL_CONSTANT_COLOR
.
归档时间: |
|
查看次数: |
18754 次 |
最近记录: |