当我显示图像时,我不能再使用颜色 openGL
When I display image, I can't use colors anymore openGL
当我在 openGL 中打开并显示图像时,屏幕上的所有颜色(图像除外)突然变成黑色,我无法再使用其他颜色绘制。
这是我屏幕上的彩色按钮
void drawButton(int x1,int y1,int x2,int y2,int r,int g,int b)
{
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glColor3f(r,g,b);
glBegin(GL_QUADS);
glVertex2f(x1,y1);
glVertex2f(x2,y1);
glVertex2f(x2,y2);
glVertex2f(x1,y2);
glEnd();
glFlush();
glutSwapBuffers();
}
这里是显示图片的功能
void display_image(char* file_name)
{
GLuint texture_id=loadIm(file_name);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture_id);
glLoadIdentity();
glColor3f(1, 1, 1);
glFrontFace(GL_CCW);
glCullFace(GL_FRONT);
glBindTexture(GL_TEXTURE_2D, texture_id);
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
glBegin(GL_QUADS);
glTexCoord2f(0,1); glVertex2f(0, 0.0);
glTexCoord2f(0,0); glVertex2f(0, wh);
glTexCoord2f(1,0); glVertex2f(ww,wh);
glTexCoord2f(1,1); glVertex2f(ww, 0.0);
glEnd();
glFlush();
glutSwapBuffers();
drawArea();
}
编辑:glDisable(GL_TEXTURE_2D)
OpenGL 是一个状态机。这意味着当启用 GL_TEXTURE_2D
以使用纹理绘制时,必须在之后禁用它以仅使用颜色进行渲染。在开始渲染彩色多边形之前调用 glDisable(GL_TEXTURE_2D);
应该可以解决问题。
当我在 openGL 中打开并显示图像时,屏幕上的所有颜色(图像除外)突然变成黑色,我无法再使用其他颜色绘制。
这是我屏幕上的彩色按钮
void drawButton(int x1,int y1,int x2,int y2,int r,int g,int b)
{
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glColor3f(r,g,b);
glBegin(GL_QUADS);
glVertex2f(x1,y1);
glVertex2f(x2,y1);
glVertex2f(x2,y2);
glVertex2f(x1,y2);
glEnd();
glFlush();
glutSwapBuffers();
}
这里是显示图片的功能
void display_image(char* file_name)
{
GLuint texture_id=loadIm(file_name);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture_id);
glLoadIdentity();
glColor3f(1, 1, 1);
glFrontFace(GL_CCW);
glCullFace(GL_FRONT);
glBindTexture(GL_TEXTURE_2D, texture_id);
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
glBegin(GL_QUADS);
glTexCoord2f(0,1); glVertex2f(0, 0.0);
glTexCoord2f(0,0); glVertex2f(0, wh);
glTexCoord2f(1,0); glVertex2f(ww,wh);
glTexCoord2f(1,1); glVertex2f(ww, 0.0);
glEnd();
glFlush();
glutSwapBuffers();
drawArea();
}
编辑:glDisable(GL_TEXTURE_2D)
OpenGL 是一个状态机。这意味着当启用 GL_TEXTURE_2D
以使用纹理绘制时,必须在之后禁用它以仅使用颜色进行渲染。在开始渲染彩色多边形之前调用 glDisable(GL_TEXTURE_2D);
应该可以解决问题。