我在Mac OS X上使用GLUT和OpenGL。當我通過拖動窗口邊緣來調整窗口大小時,窗口被填充了垃圾值。代碼附在下面。去除垃圾的唯一方法是調用glClear(),當然,我不想這樣做。在OpenGL中調整窗口大小:垃圾輸出
問題是,我不想垃圾值。我無法弄清楚爲什麼我也能得到這樣的價值。
#include <stdio.h>
#include <stdlib.h>
#ifdef __APPLE__
#include <GLUT/glut.h>
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#else
#include <GL/glut.h>
#endif
void myInit();
void display();
void reshape(int x, int y);
void keyboard(unsigned char c, int x, int y);
void mouse(int b, int s, int x, int y);
int width;
int height;
int main(int argc, char* argv[]) {
glutInit(&argc, argv);
myInit();
glutMainLoop();
return 0;
}
void myInit(){
glutInitDisplayMode(GLUT_MULTISAMPLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("Hello World!");
glClearColor(0.2,0.2,0.2,1);
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutReshapeFunc(reshape);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0.0, 0.0, 0.5,\
0.0,0.0,0.0,\
0.0,1.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
}
void display(){
printf ("))display\n");
glFlush();
}
void keyboard(unsigned char c, int x, int y){
if (c == 27 || c == 81 || c == 113) exit(0);
else if (c == 67 || c == 99){
printf("CLEAR!\n");
glClear(GL_COLOR_BUFFER_BIT);
glutPostRedisplay();
}
}
void putDot(int x, int y){
glBegin(GL_POINTS);
glVertex3f(x,height-y,0);
glEnd();
glutPostRedisplay();
}
void mouse(int b, int s, int x, int y){
if (b == GLUT_LEFT_BUTTON && s == GLUT_DOWN){
printf("MouseD\n");
putDot(x,y);
}
}
void reshape(int x, int y){
printf ("))reshape\n");
width = x;
height = y;
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,width, 0,height, -10,10);
glMatrixMode(GL_MODELVIEW);
glutPostRedisplay();
}
編輯:我在Ubuntu 14.04類似的問題。所以麻煩一定是我的編碼(當然!)。
這裏有個問題,或者你只是告訴我們關於你的程序? – immibis
謝謝,我已經看到了這個問題。那邊的問題與我的不同。我想知道我調整大小的方式是引入垃圾值還是其他值。如果是這樣,那是什麼? – Harsh
重新調整大小後,您不會重繪場景。這就是你看到垃圾的原因。在另一個問題中,您遇到與用戶相同的問題:您的顯示功能不能清除屏幕並重新繪製場景。 – BDL