This just shows a blank black screen, and if I do not put glutSwapBuffers() in both places it shows a blank white screen? [duplicate]

陌路散爱 提交于 2019-12-14 00:09:02

问题


When I compile it, it makes a blank blac screen, if I take out glut swap buffers from either location, or both at the same time I get a blank white screen, whats the problem?

#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif

#include <stdlib.h>



 void ProcessSpecialKeys(int key, int x, int y){

    switch(key){

       case GLUT_KEY_RIGHT:

exit(0);

       case GLUT_KEY_LEFT:

exit(0);

       case GLUT_KEY_UP:

exit(0);

       case GLUT_KEY_DOWN:

exit(0);

       default:

exit(0);

    }

}




void renderPrimitive(void){

    glBegin(GL_QUADS);
    glVertex3f(-1.0f,-1.0f,0.0f);
    glVertex3f(-1.0f,1.0f,0.0f);
    glVertex3f(1.0f,1.0f,0.0f);
    glVertex3f(1.0f,-1.0f,0.0f);
    glEnd();
}

void display(void){

    glTranslatef(0.0f,0.0f,-0.5f);
    renderPrimitive();
    glutSwapBuffers();
}

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

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("Dimension");
glutDisplayFunc(display);

    glLoadIdentity();

    glutSpecialFunc(ProcessSpecialKeys);

glutMainLoop();

return 0;
}

回答1:


Before you start a new draw, you need to clear the buffer. In other words, do this in your display function:

void display(void){
    glClear(GL_COLOR_BUFFER_BIT); // <-----
    glTranslatef(0.0f,0.0f,-0.5f);
    renderPrimitive();
    glutSwapBuffers();
}

and read about the function glClearColor

EDITED:

That's not the right place, but to change the background color, do this:

void display(void){
    glClearColor(0.5, 0.5, 0.5, 1);
    glClear(GL_COLOR_BUFFER_BIT); // <-----
    glScalef(0.5f,0.5f,0.5f);  // Your Quad is taking all the framebuffer
    renderPrimitive();
    glutSwapBuffers();
}



回答2:


Try glColor3f(0.5f, 0.5f, 0.5f); And remove glClearColor(0.5, 0.5, 0.5, 1);




回答3:


Try this:

#include <GL/glut.h>
#include <stdlib.h>

void ProcessSpecialKeys(int key, int x, int y)
{
    switch(key)
    {
    case GLUT_KEY_RIGHT:
    case GLUT_KEY_LEFT:
    case GLUT_KEY_UP:
    case GLUT_KEY_DOWN:
        exit(0);
        break;
    default:
        exit(0);
        break;
    }
}

void renderPrimitive()
{
    glBegin(GL_QUADS);
    glVertex3f(-1.0f,-1.0f,0.0f);
    glVertex3f(-1.0f,1.0f,0.0f);
    glVertex3f(1.0f,1.0f,0.0f);
    glVertex3f(1.0f,-1.0f,0.0f);
    glEnd();
}

void display()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    glOrtho( -2, 2, -2, 2, -1, 1 );

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();

    glPushMatrix();
    glTranslatef(0.0f,0.0f,-0.5f);
    renderPrimitive();
    glPopMatrix();

    glutSwapBuffers();
}

int main(int argc, char **argv) 
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(320,320);
    glutCreateWindow("Dimension");
    glutDisplayFunc(display);
    glutSpecialFunc(ProcessSpecialKeys);
    glutMainLoop();
    return 0;
}


来源:https://stackoverflow.com/questions/17731366/this-just-shows-a-blank-black-screen-and-if-i-do-not-put-glutswapbuffers-in-b

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!