所以,我需要制作一个着色器来用给定的颜色替换纹理中的灰色。如果我将颜色设置为给定的特定颜色,片段着色器可以正常工作,例如
gl_FragColor = vec4(1, 1, 0, 1);
但是,当我尝试检索纹理的原始颜色时出现错误。由于某种原因,它总是返回黑色。
uniform sampler2D texture; //texture to change
void main() {
vec2 coords = gl_TexCoord[0].xy;
vec3 normalColor = texture2D(texture, coords).rgb; //original color
gl_FragColor = vec4(normalColor.r, normalColor.g, normalColor.b, 1);
}
从理论上讲,它应该什么都不做 - 纹理应该保持不变。但它反而变得完全黑色。我认为问题在于我不确定如何将纹理作为参数传递(到统一变量)。我目前正在使用 ID(整数),但它似乎总是返回黑色。所以我基本上不知道如何设置统一纹理的值(或以任何其他方式获取它,而不使用参数)。代码(Java):
program.setUniform("texture", t.getTextureID());
我正在使用从这里获得的 Program 类,以及 SlickUtils Texture 类,但我认为这无关紧要。