gpt4 book ai didi

c - 关于 glutReshapeFunc()

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:44 25 4
gpt4 key购买 nike

我最初用小代码绘制一个正方形,但当我最大化窗口时,它变成了矩形。我知道这与宽高比有关,当我添加 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();


}

最佳答案

您的问题与 gluOrtho2D (...) 的使用有关。如果您想保持宽高比,则需要根据窗口的尺寸定义投影矩阵。

我建议你在 reshape 函数中这样做:

GLdouble aspect = (GLdouble)w / (GLdouble)h;

glMatrixMode (GL_PROJECTION);
glLoadIdentity ();

gluOrtho2D (-1.0 * aspect, 1.0 * aspect, -1.0, 1.0);

glMatrixMode (GL_MODELVIEW);

glViewport (0, 0, w, h);

关于c - 关于 glutReshapeFunc(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18474496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com