Java Libgdx/OpenGL,为什么sprite不';t更改颜色/图纸
虽然我使用Libgdx已经有一段时间了,但对OpenGL来说还是非常陌生的 我正在为您实现本教程中的一些代码 vert和frag文件几乎与本教程的作者相同,尽管我试图通过java代码更改颜色和alpha 下面是我如何实现着色器程序的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
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分钟我找到了答案。在将着色器设置为批处理后,应该设置统一或属性。我不想删除这篇文章,因为有人可能会发现它很有用。我该怎么处理它的建议?