3
\$\begingroup\$

I am writing a bump mapping demo, so I need an image texture, and a normal texture which should be loaded into the fragment shader.


This is the texture part of my OpenGL code:

glActiveTexture(GL_TEXTURE0);
GLuint textureID;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1024, 1024, 0, GL_RGB, GL_UNSIGNED_BYTE, brick);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
GLint textureLocation = glGetUniformLocation(shader, "texture");
glUniform1i(textureLocation, 0);

glActiveTexture(GL_TEXTURE1);
GLuint normal_textureID;
glGenTextures(1, &normal_textureID);
glBindTexture(GL_TEXTURE_2D, normal_textureID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1024, 1024, 0, GL_RGB, GL_UNSIGNED_BYTE, 
    brick_texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
GLint normalTextureLocation = glGetUniformLocation(shader, "normal_texture");
glUniform1i(normalTextureLocation, 1);

Here is the fragment shader:

uniform vec3 light;
uniform sampler2D texture;
uniform sampler2D normal_texture;

void main() {
    vec3 tex = texture2D(normal_texture, gl_TexCoord[0].st).rgb;
    gl_FragColor = vec4(tex, 1.0);
}

I am sure that the brick array contains the image texture, and the brick_texture array contains the normal texture; but it seems normal_texture and texture are both the image texture, not the normal texture. What am I doing wrong, in regards to multi-texture?

\$\endgroup\$
  • 2
    \$\begingroup\$ You're sampling from only normal_texture in your shader; is this intentional? \$\endgroup\$ – Maximus Minimus May 16 '17 at 7:24
  • \$\begingroup\$ Also - have you the program bound (using glUseProgram) before making your glUniform1i calls? \$\endgroup\$ – Maximus Minimus May 16 '17 at 9:34
  • \$\begingroup\$ @LeComteduMerde-fou I used glUseProgram before this code. I change normal_texture to texture in fragment shader, but the texture output is the same, however I want different textures. \$\endgroup\$ – Yuheng Zou May 16 '17 at 17:44
  • \$\begingroup\$ You possibly have some other error in part of the code you haven't shown us then. Can you confirm that your shaders compile successfully? \$\endgroup\$ – Maximus Minimus May 16 '17 at 18:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.