2013-05-04 111 views
0

我试图在OpenGL中使用SOIL图形加载PNG纹理,并在GL四边显示纹理,但是当我调用函数时,图像加载正确,但改变整个屏幕的颜色!使用纹理颜色绘制整个屏幕的OpenGL土壤

如果是蓝色图像,屏幕变成蓝色色素! 如果红色,变为红色! 任何人都知道是什么原因造成这种

正确的颜色没有图片加载:http://i.stack.imgur.com/OHroq.jpg

错误的颜色与图片加载:http://i.stack.imgur.com/LyRwJ.jpg

CODE:

int LoadGLTextures()  {    

    texture[0] = SOIL_load_OGL_texture("test.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID,SOIL_FLAG_INVERT_Y); 

    glBindTexture(GL_TEXTURE_2D, texture[0]); 

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);} 

和方形码:

glBindTexture(GL_TEXTURE_2D, texture[0]); 

    glBegin(GL_QUADS); 

    glColor3f(1.0f, 1.0f, 1.0f); 

    glTexCoord2f(0.0f, 0.0f); glVertex3f(mover, 11.0f, 1.0f); 
    glTexCoord2f(1.0f, 0.0f); glVertex3f(mover+44,11.0f, 1.0f); 
    glTexCoord2f(1.0f, 1.0f); glVertex3f(mover+44, 44.0f, 1.0f); 
    glTexCoord2f(0.0f, 1.0f); glVertex3f(mover, 44.0f, 1.0f); 

    glEnd(); 
} 

回答

2

你似乎再也不会禁用纹理。 OpenGL是一个状态机,所以你设置或启用的任何东西都会保持这种方式,直到你设置其他东西/禁用它。在你的情况,它看起来像你纹理这一个四边形,并指定texcoords,你应该。但是对于所有其他对象,纹理仍然存在。 texcoords也是GL状态。但是当你打算绘制无纹理时,你似乎没有为其他四边形设置新的texcoords,所有顶点将使用0.0,1.0作为texcoords,所以基本上使用纹理的边缘纹理来修改所有其他对象的颜色。

+0

曾与“glDisable(GL_TEXTURE_2D);” 谢谢! = d – Joao 2013-05-04 15:26:55