Android 将alpha值发送到片段着色器
我有一个片段着色器:Android 将alpha值发送到片段着色器,android,opengl-es,Android,Opengl Es,我有一个片段着色器: precision mediump float; uniform vec4 vColor; uniform sampler2D u_Texture; // The input texture. varying vec2 v_TexCoordinate; // Interpolated texture coordinate per fragment. varying vec4 vAlpha; void main() { gl_FragColor = vec4(
precision mediump float;
uniform vec4 vColor;
uniform sampler2D u_Texture; // The input texture.
varying vec2 v_TexCoordinate; // Interpolated texture coordinate per fragment.
varying vec4 vAlpha;
void main() {
gl_FragColor = vec4(texture2D(u_Texture, v_TexCoordinate).xyz, texture2D(u_Texture, v_TexCoordinate).w * vAlpha[3]);
}
和顶点着色器:
attribute vec3 vPosition;
attribute vec2 aTextureCoord; // Per-vertex texture coordinate information we will pass in.
attribute vec4 aAlpha;
varying vec2 v_TexCoordinate;
varying vec4 vAlpha;
void main() {
v_TexCoordinate = aTextureCoord;
vAlpha = aAlpha;
gl_Position = uMVPMatrix * vec4(vPosition,1.0);
}
并尝试从我的程序中将alpha值设置为纹理
private final int mAlphaHandle;
private float[] color = {0.5f};
设置:
使用:
GLES20.glEnableVertexAttribArray(mAlphaHandle);
GLES20.glVertexAttribPointer(mAlphaHandle, 1,GLES20.GL_FLOAT, false,4, alphaBuffer);
混合已启用
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
但是我在屏幕上没有效果。所以问题是为什么我在屏幕上没有效果?实际上,a希望在将来动态更改alpha值 如果将“vAlpha[3]”替换为1.0,您是否可以看到场景(如果不是,问题不在alpha缓冲区中)?还有,你的字母表是什么?我希望你的GLSL编译器足够聪明,不需要实际做两个纹理获取:)我会考虑<代码> GL*FraceChu色t= Trave2D(UA-纹理,VX-TealSt坐标)*VEC4(VEC3(1),ValPHA(3));<代码>,以防万一。
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);