Opengl Shader, ce qui est le gl_FragColor alpha de composants?
Je pense que ça va être un peu simple réponse.
Mais je ne peux pas trouver la réponse sur google.
C'est OpenGLES shader chose. Je suis à l'aide de cocos2d-x moteur.
C'est mon fragment de code du shader.
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;
}
Je veux juste donner de l'opacité dans certains cercle de la zone. J'ai donc changer la couleur de l'w de la valeur parce que je pensais que c'est la valeur alpha du texel. Mais le résultat était très bizarre.
Je crains que ce n'est pas la valeur alpha.
Même si j'ai mis la valeur à 1,0 pour les tests, tout changement de sprite pour être brillant et blanc.
Son vertex shader est tout à fait normal, il n'y a rien de spécial à joint.
Aucune idée s'il vous plaît.
Mise à jour: Pour la référence, j'attache de l'image.
cas 1)
col.w = alpha;
cas 2)
col.w = 1.0
et normal de la texture avant d'appliquer un shader.)
- On dirait que vous demandez, Quel est le sens de la w composante de la vec4 attribué à gl_FragColor.
- Resultingly, vous avez raison, gl_FragColor w. 🙂
- Autant que je sache, vous le faites à droite. Vous devrez peut-être de nous montrer que (un) ce que l'entrée de la texture ressemble, et (b) ce que votre courant de sortie ressemble.
- J'ai mis le résultat de l'échantillon. 🙂
- Quel est votre mode de fusion?
- Comme Tommy dit, vous devez ajouter votre mode de fusion actuel de la question. Sur une note de côté, vous pouvez remplacer votre min/max avec des lignes pince comme ceci:
clamp(alpha, 0.0, 1.0)
. - Merci Tommy. J'ai vérifié le mode de Fusion encore. c'est GL_ONE, GL_ONE_MINUS_SRC_ALPHA. Je pense que c'est la raison d'être d'éclaircir.
Vous devez vous connecter pour publier un commentaire.
La GL ES 2.0, la carte de référence définit:
Il précise en outre:
Alors, bien sûr, à l'aide de
.a
serait plus idiomatique, mais c'est explicitement le cas que ce que vous sauvegardez à.w
est la sortie de l'alpha pourgl_FragColor
.Pour répondre à la question que vous avez défini comme un titre plutôt que de la question dans le corps, la valeur renvoyée par
texture2D
sera tout ce qui est correct pour que la texture. Soit une réelle valeur stockée si la texture estGL_RGBA
ouGL_LUMINANCE_ALPHA
ou d'autre 1.0.De sorte que vous êtes sortie de l'alpha correctement.
Si votre sortie de l'alpha n'est pas d'avoir l'effet de mélange que vous attendez alors vous devez avoir
glBlendFunc
ensemble à quelque chose d'inattendu, impliquant éventuellementGL_CONSTANT_COLOR
.