我正在尝试使用简单的着色器创建alpha径向渐变效果(一种照明)。 效果正确创建,但渐变不平滑。 精度设置为highp,所以我真的不知道在哪里看。
此着色器目前在Android上运行,使用OpenGL ES 2.0。
这是渐变目前的样子:
这是我目前的着色器:
顶点:
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)。 实际颜色目前在着色器中进行了硬编码。
答案 0 :(得分:1)
它看起来与抖动问题有关。
这可能取决于移动设备的OpenGL驱动程序实现(虽然我不知道您当前使用的是哪种型号)。在过去它曾经是一个问题。
您可以执行的可能测试是:
禁用Opengl抖动:
GLES20.glDisable(GLES20.GL_DITHER);
创建曲面时施加RGB888曲面。它通常在ConfigChooser函数中完成。我努力记住,这是我的应用程序代码的一部分:
新的AndroidGL.ConfigChooser(8,8,8,8,深度,模板):