تغيير حجم نافذة برنامج OpenGL يؤدي إلى ينهار
سؤال
لسبب ما عندما كنت تغيير حجم نافذتي برنامج OpenGL، كل شيء ينهار. يتم تشويه صورة، الإحداثيات لا تعمل، وكل شيء ببساطة تنهار. أنا أغني تخمة لإعداده.
//Code to setup glut
glutInitWindowSize(appWidth, appHeight);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutCreateWindow("Test Window");
//In drawing function
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);
//Resize function
void resize(int w, int h)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, w, h, 0);
}
وتطبيق برنامج OpenGL هو 2D بدقة.
وهذه هي الطريقة التي تبدو في البداية: http://www.picgarage.net/images /Corre_53880_651.jpeg
وهذه هي الطريقة التي يبدو بعد تغيير حجم: http://www.picgarage.net/ صور / wrong_53885_268.jpeg
المحلول
ويجب أن لا ننسى أن ربط تخمة "إعادة تشكيل" حدث:
glutReshapeFunc(resize);
وإعادة العرض الخاص بك:
void resize(int w, int h)
{
glViewport(0, 0, width, height); //NEW
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, w, h, 0);
}
وإسقاط منظور يجب أن تأخذ نسبة الارتفاع الجديدة في الاعتبار:
void resizeWindow(int width, int height)
{
double asratio;
if (height == 0) height = 1; //to avoid divide-by-zero
asratio = width / (double) height;
glViewport(0, 0, width, height); //adjust GL viewport
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(FOV, asratio, ZMIN, ZMAX); //adjust perspective
glMatrixMode(GL_MODELVIEW);
}
لا تنتمي إلى StackOverflow