Opengl 当我使用SOIL加载下一个图像时,它将替换之前加载的所有图像

Opengl 当我使用SOIL加载下一个图像时,它将替换之前加载的所有图像,opengl,Opengl,这是我代码的一部分,一个简单的气球点击游戏。我有一个背景图像和另一个气球图像,代码似乎取代了我以前加载的所有图像。帮助PPPP GLuint tex_2d; GLuint tex_bg; int main (int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE); glutInitWindowSize

这是我代码的一部分,一个简单的气球点击游戏。我有一个背景图像和另一个气球图像,代码似乎取代了我以前加载的所有图像。帮助PPPP

    GLuint tex_2d;
    GLuint tex_bg;

    int main (int argc, char **argv)
    {

        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE);
        glutInitWindowSize(800, 800);
        glutInitWindowPosition(100, 100);
        glutCreateWindow("Lab Assignment");

        init();
        glutDisplayFunc(display);
        glutIdleFunc(display);

        glutMouseFunc(mouse);

        glutMainLoop();

        return EXIT_SUCCESS;
    }
这是我放置图像加载编码的地方,tex_bg是background.bmp,tex_2d是气球图像。为tex_2d加载的图像替换了加载较早的背景图像

    void init()
    {
        tex_bg = SOIL_load_OGL_texture
        (
            "background.bmp",
            SOIL_LOAD_AUTO,
            SOIL_CREATE_NEW_ID,
            SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
        );

        tex_2d = SOIL_load_OGL_texture
        (
            "balloonImage.bmp",
            SOIL_LOAD_AUTO,
            SOIL_CREATE_NEW_ID,
            SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
        );

        if (tex_2d == 0 || tex_bg == 0)
        {
            printf( "SOIL loading error: '%s'\n", SOIL_last_result() );
            exit(0);
        }

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);

    }



    void drawQuadOutline()
    {
        glEnable(GL_TEXTURE_2D);

        glBegin(GL_QUADS);
            glBindTexture(GL_TEXTURE_2D, tex_bg);
            glNormal3f(0, 1, 0);
            glTexCoord2f(0.0f, 0.0f);   glVertex3f(-1.0f, -1.0f, 1.0f);
            glTexCoord2f(1.0f, 0.0f);   glVertex3f(1.0f, -1.0f, 1.0f);
            glTexCoord2f(1.0f, 1.0f);   glVertex3f(1.0f, 1.0f, 1.0f);
            glTexCoord2f(0.0f, 1.0f);   glVertex3f(-1.0f, 1.0f, 1.0f);
        glEnd();

        glDisable(GL_TEXTURE_2D);
    }

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);

    drawQuadOutline();

    drawCircleOutline(balloon[balloonBurst]);

    glutSwapBuffers();
}   
    void drawCircleOutline(Circle o)
    {

        float angle;

        glEnable(GL_TEXTURE_2D);

        glBegin(GL_POLYGON);
            glBindTexture(GL_TEXTURE_2D, tex_2d);
            for(angle=0.0f; angle<360.0f; angle+=2.0f)
            {        
                float radian = angle * (pi/180.0f);
                float xcos = (float)cos(radian);
                float ysin = (float)sin(radian);
                float x = xcos * o.r  + o.pos.x;
                float y = ysin * o.r  + o.pos.y;
                float tx = xcos * 0.5f + 0.5f;
                float ty = ysin * 0.5f + 0.5f;

                glTexCoord2f(tx, ty);
                glVertex2f(x, y);
            }

        glEnd();

        glDisable(GL_TEXTURE_2D);
    }
void init()
{
tex\u bg=土壤荷载\u OGL\u纹理
(
“background.bmp”,
土壤负荷自动控制,
土壤\u创建\u新的\u ID,
土壤标志MIPMAPS土壤标志倒置土壤标志NTSC安全RGB土壤标志压缩至DXT
);
tex_2d=土壤荷载纹理
(
“ballodyImage.bmp”,
土壤负荷自动控制,
土壤\u创建\u新的\u ID,
土壤标志MIPMAPS土壤标志倒置土壤标志NTSC安全RGB土壤标志压缩至DXT
);
if(tex_2d==0 | | tex_bg==0)
{
printf(“土壤加载错误:'%s'\n',土壤上次结果());
出口(0);
}
glTexParameteri(GL\u纹理\u 2D、GL\u纹理\u最小\u过滤器、GL\u线性\u MIPMAP\u线性);
glTexParameteri(GL_纹理2D、GL_纹理MAG_过滤器、GL_线性MIPMAP_线性);
}
void drawQuadOutline()
{
glEnable(GL_纹理_2D);
glBegin(GL_QUADS);
glBindTexture(GL_TEXTURE_2D,tex_bg);
glNormal3f(0,1,0);
glTexCoord2f(0.0f,0.0f);glVertex3f(-1.0f,-1.0f,1.0f);
glTexCoord2f(1.0f,0.0f);glVertex3f(1.0f,-1.0f,1.0f);
glTexCoord2f(1.0f,1.0f);glVertex3f(1.0f,1.0f,1.0f);
glTexCoord2f(0.0f,1.0f);glVertex3f(-1.0f,1.0f,1.0f);
格伦德();
glDisable(GL_纹理_2D);
}
无效显示()
{
glClear(GLU颜色缓冲位);
绘图轮廓();
drawCircleOutline(气球[气球爆破]);
glutSwapBuffers();
}   
空图纸圆圈轮廓(圆圈o)
{
浮动角;
glEnable(GL_纹理_2D);
glBegin(GL_多边形);
glBindTexture(GL_TEXTURE_2D,tex_2D);

对于(angle=0.0f;angle编码的问题是在
glBegin(…)
glEnd(…)
之间调用
glBindTexture(…)

这是无效的;如果您选中了
glGetError(…)
,您就会知道这一点

您需要重新编写此代码: 为此:
    glBegin(GL_POLYGON);
        glBindTexture(GL_TEXTURE_2D, tex_2d);

    ...

    glBegin(GL_QUADS);
        glBindTexture(GL_TEXTURE_2D, tex_bg);
    glBindTexture(GL_TEXTURE_2D, tex_2d);
    glBegin(GL_POLYGON);

    ...

    glBindTexture(GL_TEXTURE_2D, tex_bg);
    glBegin(GL_QUADS);