openGL:纹理和三角形不渲染

openGL:纹理和三角形不渲染,opengl,Opengl,如果我注释掉DrawGLScene(),我会看到一个大的着色三角形,如果我注释掉drawtri()我会看到一个绘制的方形纹理。但是我不能同时使用这两个函数——当调用这两个函数时,我只看到三角形的轮廓,并且纹理是用一个强大的红色过滤器渲染的 有什么问题吗 void DrawGLScene() { int x, y; float float_x, float_y, float_xb, float_yb; float x0=0,y0=0,x1=10,y1=10,z=-3;

如果我注释掉
DrawGLScene()
,我会看到一个大的着色三角形,如果我注释掉
drawtri()
我会看到一个绘制的方形纹理。但是我不能同时使用这两个函数——当调用这两个函数时,我只看到三角形的轮廓,并且纹理是用一个强大的红色过滤器渲染的

有什么问题吗

void DrawGLScene()
{
    int x, y;
    float float_x, float_y, float_xb, float_yb;
    float x0=0,y0=0,x1=10,y1=10,z=-3;

    // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);      // Clear The Screen And The Depth Buffer
glEnable(GL_TEXTURE_2D);
    glLoadIdentity();               // Reset The View
    glTranslatef(0.0f,0.0f,-12.0f);              // move 12 units into the screen.

    glBindTexture(GL_TEXTURE_2D, texture[0]);   // choose the texture to use.

    glPolygonMode(GL_BACK, GL_FILL);
    glPolygonMode(GL_FRONT, GL_LINE);


    glBegin(GL_QUADS);

        glTexCoord2f( 0,0);
        glVertex3f( x0, y0, z );

        glTexCoord2f( 0, 1 );
        glVertex3f( x0, y1, z );

        glTexCoord2f( 1, 1);
        glVertex3f( x1, y1, z );

        glTexCoord2f( 1, 0 );
        glVertex3f( x1, y0,z );
    glEnd();
   glDisable(GL_TEXTURE_2D);
    // since this is double buffered, swap the buffers to display what just got drawn.
    //  glutSwapBuffers();
}

void drawtri() {
    glBegin(GL_TRIANGLES);                  
        glColor3f(0.0f,0.0f,1.0f);          
        glVertex3f( 0.0f, 1.0f, 0.0f);      
        glColor3f(0.0f,1.0f,0.0f);          
        glVertex3f(-1.0f,-1.0f, 0.0f);      
        glColor3f(1.0f,0.0f,0.0f);          
        glVertex3f( 1.0f,-1.0f, 0.0f);      
    glEnd();
}
void zdisplay() 
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);          // Clear Screen and Depth Buffer

    glLoadIdentity();
    glTranslatef(0.0f,0.0f,-3.0f);          


    //drawtri();
    DrawGLScene();

    glutSwapBuffers();
}

红色过滤器是由应用的颜色引起的:

glColor3f(0.0f,0.0f,1.0f);          
在绘制四边形之前,将颜色重置为白色:

glColor3f(1.0f,1.0f,1.0f);          
该轮廓是由以下规范引起的:

glPolygonMode(GL_FRONT, GL_LINE);
指定填充模式:

glPolygonMode(GL_FRONT, GL_FILL);

在调用这两个函数时,您是否确实按照代码显示方法的顺序调用了它们?因为我怀疑顺序颠倒了。如果我是对的,我认为在绘制三角形时必须重置glPolygonMode。尝试在调用glBegin(GL_三角形)之前添加glPolygonMode(GL_FRONT_和GL_BACK,GL_FILL)

谢谢!我没有意识到glPolygonMode()会影响在此之前绘制的原语。