我试图将不同的纹理加载到GL_TEXTUREX变量,然后将它们分配给不同的球体。但到目前为止我遇到了问题。我在帖子中尝试了一些建议,例如this和this 但无法解决它。
这是我的代码的一部分:
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);
}
答案 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