【发布时间】:2021-02-25 09:23:56
【问题描述】:
我对 OpenGL 中的纹理和立方体贴图感到困惑。
假设我想要基本的纹理映射。我愿意:
GLuint texture0;
glGenTextures(1, &texture0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture0);
然后我设置glTexImage2D 并拨打glUniform1i(glGetUniformLocation(shader_program, "texture_sampler"), GL_TEXTURE0) 一切都很好。
现在,我还想使用立方体贴图进行环境映射。我想,也使用this post 作为参考,我应该这样做:
GLuint texture1;
glGenTextures(1, &texture1);
glActiveTexture(GL_TEXTURE0+1);
glBindTexture(GL_TEXTURE_CUBE_MAP, texture1);
然后是glUniform1i(glGetUniformLocation(shader_program, "cubemap_sampler"), GL_TEXTURE0+1)。
但是,这不起作用,只会渲染黑色对象。
另一方面,如果我不运行glActiveTexture(GL_TEXTURE0+1),而是坚持使用GL_TEXTURE0,一切都很好。
按照我的理解,不应该是这样的……
任何人都可以了解发生了什么吗?
我正在使用 GLSL #version 440。
【问题讨论】:
-
glUniform1i的参数不应该是GL_TEXTURE0的偏移量吗?所以glUniform1i(glGetUniformLocation(shader_program, "cubemap_sampler"), 1)。见"Binding textures to samplers"。