Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Libgdx/OpenGL,为什么sprite不';t更改颜色/图纸_Java_Opengl_Libgdx_Shader - Fatal编程技术网

Java Libgdx/OpenGL,为什么sprite不';t更改颜色/图纸

Java Libgdx/OpenGL,为什么sprite不';t更改颜色/图纸,java,opengl,libgdx,shader,Java,Opengl,Libgdx,Shader,虽然我使用Libgdx已经有一段时间了,但对OpenGL来说还是非常陌生的 我正在为您实现本教程中的一些代码 vert和frag文件几乎与本教程的作者相同,尽管我试图通过java代码更改颜色和alpha 下面是我如何实现着色器程序的 ShaderProgram shaderProgram = ShaderProgram(Gdx.files.internal("Fonts/Shader/font.vert"), Gdx.files.internal("Fonts/Shader/font.f

虽然我使用Libgdx已经有一段时间了,但对OpenGL来说还是非常陌生的

我正在为您实现本教程中的一些代码

vert和frag文件几乎与本教程的作者相同,尽管我试图通过java代码更改颜色和alpha

下面是我如何实现着色器程序的

    ShaderProgram shaderProgram = ShaderProgram(Gdx.files.internal("Fonts/Shader/font.vert"), Gdx.files.internal("Fonts/Shader/font.frag"));
    AssetLibrary.fontShader.pedantic = false;
    AssetLibrary.fontShader.setUniformf("custom_color", 1, 0, 0, 1);

    batch.setShader(AssetLibrary.fontShader);
    font.draw(batch, layout, pos.x, pos.y);
    batch.setShader(null);
这是我的片段文件

#ifdef GL_ES
precision mediump float;
#endif

uniform sampler2D u_texture;
uniform vec4 custom_color;

varying vec4 v_color;
varying vec2 v_texCoord;

const float smoothing = 1.0/16.0;

void main() {
    float distance = texture2D(u_texture, v_texCoord).a;
    float alpha = smoothstep(0.5 - smoothing, 0.5 + smoothing, distance);

    gl_FragColor = vec4(custom_color.rgb, custom_color.a * alpha);
}
所以我想:

AssetLibrary.fontShader.setAttributef("custom_color", 1, 0, 0, 1);
本来可以让我从Java中设置像素的颜色,但它所做的似乎只是让我的精灵消失。我还验证了custom_color.r和custom_color.a是通过以下方式填充的:

AssetLibrary.fontShader.getUniformSize("custom_color.r");
AssetLibrary.fontShader.getUniformSize("custom_color.a");
他们是

现在我对编程并不完全陌生,但我很难弄清楚问题是什么。屏幕上没有显示任何内容。但是,如果我进入frag文件并手动设置:

gl_FragColor = vec4(1, 0, 0, 1 * alpha);

它工作得很好,但我需要能够设置着色器文件外部的颜色。我在这里可能遗漏了什么?

Welp,在我花了很多时间格式化这个问题后,2分钟我找到了答案。在将着色器设置为批处理后,应该设置统一或属性。我不想删除这篇文章,因为有人可能会发现它很有用。我该怎么处理它的建议?