【问题标题】:Alpha gradient in OpenGL ES shader is not smoothOpenGL ES 着色器中的 Alpha 渐变不平滑
【发布时间】:2014-09-08 17:56:42
【问题描述】:

我正在尝试使用简单的着色器创建 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)。 实际颜色当前在着色器中硬编码。

【问题讨论】:

  • 只是好奇,你的帧缓冲是什么格式的? RGBA8 之类的?
  • 表面是RGB565,这就是问题所在——下面的答案是正确的。

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


【解决方案1】:

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

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

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

  1. 禁用 Opengl 抖动:

    GLES20.glDisable(GLES20.GL_DITHER);

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

    新的 AndroidGL.ConfigChooser(8, 8, 8, 8, depth, stencil):

【讨论】:

  • 谢谢,强加一个 RGB8888 表面解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-09
  • 2015-10-07
  • 2014-11-12
  • 1970-01-01
相关资源
最近更新 更多