问题
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