Java LWJGL多重纹理不工作

Java LWJGL多重纹理不工作,java,opengl,textures,lwjgl,multitexturing,Java,Opengl,Textures,Lwjgl,Multitexturing,我目前正在学习一些OpenGL,我想在立方体上应用两种不同的纹理(漫反射和镜面反射)。问题是只有第一个纹理(纹理单元0)是可访问的;两个采样器似乎都使用它,而不是使用两个不同的采样器。 即使我将两个采样器制服都指定为1,也会使用第一个(漫反射纹理)。我想我一定是忽略了什么。 我的init()的相关部分如下所示: texture = Texture.loadTextureFromFile("res/texture/stone_07_diffuse.jpg"); textureSpecular =

我目前正在学习一些OpenGL,我想在立方体上应用两种不同的纹理(漫反射和镜面反射)。问题是只有第一个纹理(纹理单元0)是可访问的;两个采样器似乎都使用它,而不是使用两个不同的采样器。

即使我将两个采样器制服都指定为1,也会使用第一个(漫反射纹理)。我想我一定是忽略了什么。

我的
init()
的相关部分如下所示:

texture = Texture.loadTextureFromFile("res/texture/stone_07_diffuse.jpg");
textureSpecular = Texture.loadTextureFromFile("res/texture/stone_07_specular.jpg");

shaderProgram = new ShaderProgram();
shaderProgram.attachVertexShader("res/shader/LightTest.vsh");
shaderProgram.attachFragmentShader("res/shader/LightTest.fsh");
shaderProgram.link()

ShaderProgram.bind(shaderProgram);
{
    shaderProgram.setUniform("materialDiffuseTexture", 0);
    shaderProgram.setUniform("materialSpecularTexture", 1);
    ...
}
ShaderProgram.unbind();

Texture.setActiveTextureUnit(0);
Texture.bind(texture);

Texture.setActiveTextureUnit(1);
Texture.bind(textureSpecular);
render()
方法的相关部分如下所示:

ShaderProgram.bind(shaderProgram);
{
    //set other uniforms as projectionMatrix, viewMatrix, etc.
    ...

    glBindVertexArray(vaoID);
    glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_BYTE, 0);
    glBindVertexArray(0);
}
ShaderProgram.unbind();
texture
textureSpecular
shaderProgram
vaoID
都是全局变量。 片段着色器中声明的一致性:

uniform sampler2D materialDiffuseTexture;
uniform sampler2D materialSpecularTexture;

我做错了什么?

哦,天哪,我现在觉得自己好蠢。问题是我使用了我的
ShaderProgram
类的
setUniform(String,float…
方法,该类调用
glUniform1f(int,float)


但是由于
sampler2D
统一保存一个整数,我必须使用
glUniform1i(int,int)
来指定纹理单位。现在它工作了

这发生在我们所有人身上。你可能想看看Youtube频道“ThinMatrix”,他两天前刚刚上传了一篇关于这个主题的教程。谢谢,我会去看看的。