OpenGL绑定几个2D纹理

时间:2014-05-13 17:00:55

标签: c++ opengl

我试图将不同的纹理加载到GL_TEXTUREX变量,然后将它们分配给不同的球体。但到目前为止我遇到了问题。我在帖子中尝试了一些建议,例如thisthis 但无法解决它。

这是我的代码的一部分:

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]));  
}

void draw(void)
{

glEnable (GL_TEXTURE_2D);
glBindTexture (GL_TEXTURE_2D, textures[0]);
glPushMatrix();
glTranslatef(0.4,0,0);
gluSphere(sun, 0.5, 36, 36); //I want this sphere to use the texture GL_TEXTURE0
glPopMatrix();
glDisable(GL_TEXTURE_2D);
}

1 个答案:

答案 0 :(得分: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