窗口重定形函数
当我们改变屏幕尺寸或是第一次生成屏幕时,我们就需要用到窗口重定形函数,来重新绘制一些图形。
注意glLoadIdentity()函数,它可以保证屏幕的改变不会对原来的绘制有影响。然而若想做到例如保持长宽比不变、或者一直居中等,仍需要进行其它的操作。
#include<Windows.h>
#include<GL/glut.h>
#include<cmath>
const double PI = acos(-1.0);
GLuint regHex;
void setupList()
{
regHex = glGenLists(1);
glNewList(regHex, GL_COMPILE);
{
glBegin(GL_POLYGON);
{
for (int i = 0; i < 6; ++i)
{
double theta = PI * i / 3.0;
int x = 400 + 150 * cos(theta);
int y = 300 + 150 * sin(theta);
glVertex2i(x, y);
}
}
glEnd();
}
glEndList();
}
//当屏幕的宽或高发生变化时(包括初始化)调用
void reshape(int w, int h)
{
glMatrixMode(GL_PROJECTION);
//使得之前的投影参数值对新的投影设置不起作用
glLoadIdentity();
gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);
glClear(GL_COLOR_BUFFER_BIT);
}
void display()
{
glColor3d(1.0, 0.0, 0.0);
glCallList(regHex);
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(800, 600);
glutCreateWindow("Reshape");
setupList();
glClearColor(1.0, 1.0, 1.0, 0.0);
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutMainLoop();
}