C++ OpenGL绑定多个2D纹理

C++ OpenGL绑定多个2D纹理,c++,opengl,C++,Opengl,我尝试将不同的纹理加载到GL_TEXTUREX变量,然后将它们分配到不同的球体。但到目前为止我遇到了一些问题。我尝试了一些建议,在post-like和 但我无法解决它 这是我代码的一部分: GLuint textures[2]; void LoadTextures(std::string const& dirname) { glGenTextures(2, textures); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_

我尝试将不同的纹理加载到GL_TEXTUREX变量,然后将它们分配到不同的球体。但到目前为止我遇到了一些问题。我尝试了一些建议,在post-like和 但我无法解决它

这是我代码的一部分:

GLuint textures[2];
void LoadTextures(std::string const& dirname)
{
glGenTextures(2, textures);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textures[0]);
Image_t sun = loadPNG(std::string(dirname + "/sun.png"));
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1024, 512, 0, GL_RGB, GL_UNSIGNED_BYTE, &(sun.data[0]));  
glBindTexture(GL_TEXTURE_2D, textures[0]);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, textures[1]);
Image_t mercury = loadPNG(std::string(dirname + "/mercury.png"));
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 1024, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, &(mercury.data[0]));  
}


在执行绘制调用之前,需要调用
glBindTexture

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textures[0]);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, textures[1]);

draw_things();
在上面的示例中,无论使用
draw_things
绘制什么,都可以访问纹理0和1(GL_TEXTURE0和GL_TEXTURE1)

现在,如果你想画很多东西,但每个都有不同的纹理,那么你需要:

glActiveTexture(GL_TEXTURE0); // activate any texture unit
glEnable(GL_TEXTURE_2D);      // make sure texturing is enabled

glBindTexture(GL_TEXTURE_2D, thing1_texture);
draw_thing1();

glBindTexture(GL_TEXTURE_2D, thing2_texture);
draw_thing2();

// etecetera

你在用什么?你想要达到什么样的效果,以及它与多重织物有什么关系?是的,我是这样使用它的:gluquartexture(sun,glu-TRUE);我想用多重纹理做的就是用不同的纹理(太阳、地球、火星等)来纹理我所有的球体。我不确定我是否在正确的轨道上。谢谢你的回复。我看到了一些改进。这就是我的模特的样子:谢谢!现在我越来越接近了。看起来纹理的颜色格式是错误的。我看到您在调用
glTexImage2D
时硬编码了
GL\u RGB/GL\u RGBA
。你确定这些格式正确吗?此外,尺寸也是固定的。它们与图像大小匹配吗?理想情况是从
Image\t
对象查询此类数据。它应该有像
getWidth()
getFormat(),
等方法。问题在于颜色格式。非常感谢您抽出时间!:D
glActiveTexture(GL_TEXTURE0); // activate any texture unit
glEnable(GL_TEXTURE_2D);      // make sure texturing is enabled

glBindTexture(GL_TEXTURE_2D, thing1_texture);
draw_thing1();

glBindTexture(GL_TEXTURE_2D, thing2_texture);
draw_thing2();

// etecetera