libgdx:均匀颜色未发送到片段着色器

时间:2017-03-04 04:15:46

标签: opengl libgdx glsl

我有一个非常简单的着色器,它使用自定义着色器程序。我发送了相机转型,世界转型为制服,这一切都有效。我也以同样的方式发送均匀的颜色,但它似乎不会影响屏幕上的颜色。使用set()它只会出现黑色,就像颜色没有正确设置一样。

libgdx着色器中的代码:

protected final int u_projTrans = register(new Uniform("u_projTrans"));
protected final int u_worldTrans = register(new Uniform("u_worldTrans"));
protected final int u_color = register(new Uniform("u_color"));

@Override
public void begin(Camera camera, RenderContext context) {
    program.begin();
    context.setDepthTest(GL20.GL_LEQUAL, 0f, 1f);
    context.setDepthMask(true);
    set(u_projTrans, camera.combined);
}

@Override
public void render(Renderable renderable) {
    set(u_worldTrans, renderable.worldTransform);

    set(u_color, 1, 1, 1); // binding, but no change in color
    // program.setUniformf("u_color", 1, 1, 1); // works

    renderable.meshPart.render(program);
}

查看上面的代码,我在begin()函数中绑定u_projTrans,并在render()函数中绑定u_worldTrans。我知道这些都是基于我看到的图像工作。

顶点着色器:

attribute vec3 a_position;
uniform mat4 u_projTrans;
uniform mat4 u_worldTrans;

void main() {
    gl_Position = u_projTrans * u_worldTrans * vec4(a_position, 1.0);
}

片段着色器:

uniform vec3 u_color;

void main() {
    gl_FragColor = vec4(u_color, 1); // hard-coding this to a color works, so the value in u_color seems to be (0,0,0)
}

当我尝试将颜色设置为均匀时,它表示它正确绑定,但我没有像颜色设置为(0,0,0)那样获得任何颜色变化。但是,使用program.setUniformf()有效。使用set()我完全按照我对其他人的方式绑定它,所以我不知道除了vec3而不是{{mat4之外还有什么不同之处1}}。

有谁知道为什么我在set(u_color, 1, 1, 1)传递的值不会转到着色器?

1 个答案:

答案 0 :(得分:1)

当您致电set(u_color, 1, 1, 1);时,您正在使用set(Uniform, int, int int)方法。你想要的是set(Uniform, float, float, float)方法,所以请改用set(u_color, 1f, 1f, 1f)