我目前正在学习一些 OpenGL,我想将 2 种不同的纹理(漫反射和镜面反射)应用于立方体。问题是只有第一个纹理(纹理单元 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;
我做错了什么?