OpenGL ES着色器中的Alpha渐变不平滑

时间:2014-09-08 17:56:42

标签: android opengl-es-2.0 shader fragment-shader vertex-shader

我正在尝试使用简单的着色器创建alpha径向渐变效果(一种照明)。 效果正确创建,但渐变不平滑。 精度设置为highp,所以我真的不知道在哪里看。

此着色器目前在Android上运行,使用OpenGL ES 2.0。

这是渐变目前的样子:

enter image description here

这是我目前的着色器:

顶点:

precision highp float;

attribute vec4 vPosition;
attribute vec2 vStaticInterpolation;

varying vec2 interpolator;

void main() {
    interpolator = vStaticInterpolation;
    gl_Position = vPosition;
}

片段:

precision highp float;

uniform float alphaFactor;
varying vec2 interpolator;


float MAX_ALPHA = 0.75;

void main() {

    float x = distance(interpolator, vec2(0.0, 0.0));

    float alpha = MAX_ALPHA - MAX_ALPHA * x;
    alpha = max(alpha, 0.0);



    gl_FragColor = vec4(0.925, 0.921, 0.843, alpha);
    gl_FragColor.a *= alphaFactor;
}

着色器在vStaticInterpolation中接收插值的常量属性(从-1.0到1.0)。 实际颜色目前在着色器中进行了硬编码。

1 个答案:

答案 0 :(得分:1)

它看起来与抖动问题有关。

这可能取决于移动设备的OpenGL驱动程序实现(虽然我不知道您当前使用的是哪种型号)。在过去它曾经是一个问题。

您可以执行的可能测试是:

  1. 禁用Opengl抖动:

    GLES20.glDisable(GLES20.GL_DITHER);

  2. 创建曲面时施加RGB888曲面。它通常在ConfigChooser函数中完成。我努力记住,这是我的应用程序代码的一部分:

    新的AndroidGL.ConfigChooser(8,8,8,8,深度,模板):