2014-05-10 52 views
0

我有這個OpenGL項目,我正在處理,我有這兩個PNG文件,我需要綁定到兩個不同的對象。到目前爲止,我只將最新加載的紋理綁定到一切。OpenGL之間切換2紋理

我打開我的PNG格式是這樣的:

void load_texture(GLuint texture, const char* filename, int x, int y) { 
    Fl_PNG_Image image(filename); // load texturemap 
    glBindTexture(GL_TEXTURE_2D, texture); 
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE , GL_MODULATE); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
    gluBuild2DMipmaps(GL_TEXTURE_2D, 3, x, y, GL_RGB, GL_UNSIGNED_BYTE, image.data()[0]); 
} 

在初始化我有這樣的:

GLuint* textures; 
... 
int main(void) { 
    ... 
    textures = new GLuint[2]; 
    glGenTextures(2, textures); 
    ... 
在我的繪製函數

我這樣做:

glEnable(GL_TEXTURE_2D);  
    load_texture(textures[1], "wood.png", 64, 64); 
    load_texture(textures[0], "brick.png", 128, 128); 

    for (unsigned int x = 0; x < x_size; ++x) { 
    for (unsigned int z = 0; z < z_size; ++z) { 
    char type = m->get_object(x,z); 
    switch (type) { 
     case 'W': { 
     // Front Face 
     glBegin(GL_QUADS); 
     glBindTexture(GL_TEXTURE_2D, textures[0]); 
     glColor3f(1.0, 1.0, 1.0); 
     glTexCoord2f(0.0, 1.0); glVertex3f(x , 1, z + 1); 
     glTexCoord2f(1.0, 1.0); glVertex3f(x + 1, 1, z + 1); 
     glTexCoord2f(1.0, 0.0); glVertex3f(x + 1, 0, z + 1); 
     glTexCoord2f(0.0, 0.0); glVertex3f(x , 0, z + 1); 
     // Back Face 
     glTexCoord2f(0.0, 1.0); glVertex3f(x + 1, 1, z); 
     glTexCoord2f(1.0, 1.0); glVertex3f(x , 1, z); 
     glTexCoord2f(1.0, 0.0); glVertex3f(x , 0, z); 
     glTexCoord2f(0.0, 0.0); glVertex3f(x + 1, 0, z); 
     // Right face 
     glTexCoord2f(0.0, 1.0); glVertex3f(x + 1, 1, z + 1); 
     glTexCoord2f(1.0, 1.0); glVertex3f(x + 1, 1, z ); 
     glTexCoord2f(1.0, 0.0); glVertex3f(x + 1, 0, z ); 
     glTexCoord2f(0.0, 0.0); glVertex3f(x + 1, 0, z + 1); 
     // Left Face 
     glTexCoord2f(0.0, 1.0); glVertex3f(x, 1, z ); 
     glTexCoord2f(1.0, 1.0); glVertex3f(x, 1, z + 1); 
     glTexCoord2f(1.0, 0.0); glVertex3f(x, 0, z + 1); 
     glTexCoord2f(0.0, 0.0); glVertex3f(x, 0, z ); 
     glEnd(); 
     break; 
     } 
     case ' ': { 
     // Draw floor 
     glBegin(GL_QUADS); 
     glBindTexture(GL_TEXTURE_2D, textures[1]); 
     glTexCoord2f(0.0, 0.0); glVertex3f(x , 0, z ); 
     glTexCoord2f(0.0, 1.0); glVertex3f(x , 0, z + 1); 
     glTexCoord2f(1.0, 1.0); glVertex3f(x + 1, 0, z + 1); 
     glTexCoord2f(1.0, 0.0); glVertex3f(x + 1, 0, z ); 
     glEnd(); 

     // Draw roof 
     glBegin(GL_QUADS); 
     glBindTexture(GL_TEXTURE_2D, textures[0]); 
     glTexCoord2f(0.0, 0.0); glVertex3f(x , 1, z ); 
     glTexCoord2f(0.0, 1.0); glVertex3f(x , 1, z + 1); 
     glTexCoord2f(1.0, 1.0); glVertex3f(x + 1, 1, z + 1); 
     glTexCoord2f(1.0, 0.0); glVertex3f(x + 1, 1, z ); 
     glEnd(); 
     break; 
     } 
    default: 
     break; 
    } 
    } 

它看起來像這樣: output

wood.png看起來是這樣的: wood.png

,並應在地板和天花板被渲染。 任何見解將不勝感激。 由於提前, 最大

回答

4

不能調用glBindTextureglBeginglEnd之間。如果glBindTexture是在glBegin的執行,並相應 執行glEnd之間執行 產生

GL_INVALID_OPERATION。

請參閱glBindTexture documentation