0

最初は正方形を描く小さなコードがありますが、ウィンドウを最大化すると長方形に変わります。これはアスペクト比と関係があることを知っています。また、glutReshapeFunc(Reshape); を追加すると、つまり、ウィンドウを最大化した後、それは正方形のままです。ReshapFunc は、表示が変更されるたびに呼び出され、最初の表示の前にも呼び出されます。reshapefunc を追加するだけでは、アスペクト比を維持する方法がわかりません。これを理解するのを手伝ってください。ここにコードをコピーしています:

void display()
{
 glClear(GL_COLOR_BUFFER_BIT);
 glColor3f(0.5, 0.5, 1.0);

glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(0.5, -0.5);
glVertex2f(0.5, 0.5);
glVertex2f(-0.5, 0.5);
glEnd();
glutSwapBuffers();
    glFlush();

}
void Reshape(int w, int h) {

glutPostRedisplay();

}
void init()
{

glClearColor(1.0, 0.0, 1.0, 0.0);

glColor3f(1.0, 1.0, 1.0);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluOrtho2D(-1.0, 1.0, -1.0, 1.0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}


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


glutInit(&argc, argv);

glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(500, 500);
glutInitWindowPosition(200, 200);
glutCreateWindow("basics");


glutDisplayFunc(display);
// If I comment this, it will become rectangle.
glutReshapeFunc(Reshape);
init();

 glutMainLoop();


}
4

1 に答える 1