1

If i comment out DrawGLScene(), i see a large shaded triangle, if I comment out drawtri() i see a square texture drawn. But I am not able to combine both - when both func's are called, I see only triangle outline and the texture is rendered with a strong red filter applied.

What could be the problem?

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();
}
4

2 に答える 2

0

The red filter is caused by the applied color:

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

Reset the color to white before drawing the quad:

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

The outline is caused by the following specification:

glPolygonMode(GL_FRONT, GL_LINE);

Specify fill mode:

glPolygonMode(GL_FRONT, GL_FILL);
于 2013-03-12T17:56:22.940 に答える
0

When calling both functions, did you actually call the methods in the order in which the code shows them? Because I suspect that the order was reversed. If I'm right, I think you must reset the glPolygonMode when drawing the triangle. Try adding glPolygonMode(GL_FRONT_AND_BACK, GL_FILL) before the call to glBegin(GL_TRIANGLES).

于 2013-03-12T18:01:32.473 に答える