二者在reshape中的设置不一样可之间看后面的介绍
void display()
{
//清空屏幕,使用了深度缓存`GL_DEPTH_BUFFER_BIT`必须加
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
//设置观察轴向,从点(2,2,4)看向点(0,0,0);
//(0,1,0)为向上轴向,观察轴向不能与它平行
gluLookAt(2.0, 2.0, 4.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
drawObject();//这里绘制你的图元
glutSwapBuffers();//刷新屏幕
}
void init()
{
glClearColor(1.0, 1.0, 1.0, 1.0);//设置背景色为白色
glColor3f(0.0, 0.0, 0.0);//设置绘制颜色为黑色
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);//启用深度缓存
glutInitWindowSize(500, 500);
glutInitWindowPosition(0, 0);
glutCreateWindow("Test");
glutReshapeFunc(reshape);
glutDisplayFunc(display);
init();
// Enable hidden--surface--removal
glEnable(GL_DEPTH_TEST); //使用了深度缓存这行不能掉
glutMainLoop();
}
该函数有四个参数:
void reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);//投影矩阵
glLoadIdentity();//将矩阵设置成单位矩阵
//使用透视投影
GLfloat aspect = (float)w / (float)h;
gluPerspective(60.0f, aspect, 0.5f, 15.0f);
glMatrixMode(GL_MODELVIEW);//切换回模型视图矩阵
}
该函数有六个参数,分别对应裁剪体的左、右、下、上、近裁剪面、远裁剪面
void reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//使用正交投影
if (w <= h)
glOrtho(-2.0, 2.0, -2.0 * (GLfloat)h / (GLfloat)w,
2.0 * (GLfloat)h / (GLfloat)w, -10.0, 10.0);
else
glOrtho(-2.0 * (GLfloat)w / (GLfloat)h,
2.0 * (GLfloat)w / (GLfloat)h, -2.0, 2.0, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
}