c - 在 Linux 中使用 glut 调整窗口大小时显示错误

标签 c opengl glut

我试着写了一个简单的过剩程序,但是我发现在调整窗口大小时显示错误(如图所示)。我使用带有 kde 的 Arch Linux。 我该如何解决?

调整大小之前:

enter image description here

调整大小后:

enter image description here

#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>
void myinit(void)
{
  glClearColor(1.0, 1.0, 1.0, 1.0);
  glColor3f(1.0, 0.0, 0.0);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluOrtho2D(0.0, 500.0, 0.0, 500.0);
  glMatrixMode(GL_MODELVIEW);
}
void display( void )
{
  typedef GLfloat point2[2];
  point2 vertices[3]={{0.0,0.0},{250.0,500.0},{500.0,0.0}};
  int i, j, k;
  int rand();
  point2 p ={75.0,50.0};
  glClear(GL_COLOR_BUFFER_BIT);
  for( k=0; k<5000; k++)
  {
    j=rand()%3;
    p[0] = (p[0]+vertices[j][0])/2.0; 
    p[1] = (p[1]+vertices[j][1])/2.0;
    glBegin(GL_POINTS);
           glVertex2fv(p); 
    glEnd();
  }
  glFlush();
  printf ("display invokved....\n");
} 
void main(int argc, char** argv)
{
  glutInit(&argc,argv);
  glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
  glutInitWindowSize(500,500); 
  glutInitWindowPosition(0,0); 
  glutCreateWindow("Sierpinski Gasket"); 
  glutDisplayFunc(display); 
  myinit();
  glutMainLoop();
}

最佳答案

切换到双缓冲(GLUT_DOUBLE & glutSwapBuffers())在我的系统上修复了它:

#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>
void display( void )
{
  typedef GLfloat point2[2];
  point2 vertices[3]={{0.0,0.0},{250.0,500.0},{500.0,0.0}};
  int i, j, k;
  int rand();
  point2 p ={75.0,50.0};

  glClearColor(1.0, 1.0, 1.0, 1.0);
  glClear(GL_COLOR_BUFFER_BIT);

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluOrtho2D(0.0, 500.0, 0.0, 500.0);

  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();

  glBegin(GL_POINTS);
  glColor3f(1.0, 0.0, 0.0);
  for( k=0; k<5000; k++)
  {
    j=rand()%3;
    p[0] = (p[0]+vertices[j][0])/2.0; 
    p[1] = (p[1]+vertices[j][1])/2.0;
    glVertex2fv(p); 
  }
  glEnd();
  glutSwapBuffers();
} 
int main(int argc, char** argv)
{
  glutInit(&argc,argv);
  glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
  glutInitWindowSize(500,500); 
  glutInitWindowPosition(0,0); 
  glutCreateWindow("Sierpinski Gasket"); 
  glutDisplayFunc(display); 
  glutMainLoop();
  return 0;
}

关于c - 在 Linux 中使用 glut 调整窗口大小时显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42619482/

相关文章:

c++ - 以双格式创建随机数,eclipse 停止工作

c - c 正则表达式中的多个十六进制范围无法按预期工作

c++ - 这个 min() 函数是如何工作的?

c++ - OpenGL 中多个纹理的问题

c++ - 如何使用opengl绘制一个简单的网格?

确保这个生产者-消费者示例不会死锁的条件?

c++ - GLFW 洋红色导致意外行为

c++ - 我可以编写 OpenGL 应用程序而不将其绑定(bind)到某个窗口库吗?

java - 如何在 LibGDX 中进行混合

c - OpenGL C - 我将如何从行星上绘制一条线迹?