* 首先介绍glutInitWindowSize(width,height),定义窗口的大小,也限制我们显示的最大范围。窗口左下角为原点,而我们电脑窗口的原点为左上角。下面以w代替*
gluOrtho2D(x1,x2,y1,y2)相当于画板,我们所绘的东西在这上面,下面以o代替
glViewPort(x1,y1,x2,y2)定义了gluOrtho2D定义的窗口在glutInitWindowSize定义的窗口的投影大小,默认为窗口大小控制着gluOrtho2D所定义的画板在glutInitWindowSize所定义的窗口的缩放,因为最终的显示还是在glutInitWindowSize所定义的窗口。下面以v代替
例子1:w的大小等于v的大小,o的大小为w大的一般,那么o在w的显示为全屏,因为v控制着o在w的大小,w等于v相当于控制o在w的投影为w的大小
效果图
代码
void mydisplay(void){
//设置背景颜色rgba 范围0-1
glClearColor(1, 1, 1, 0);
//glMatrixMode(GL_PROJECTION); // 设置投影参数
glViewport(0,0,400,400);
glLoadIdentity();//移动后不会消失
gluOrtho2D(0.0, 200, 0.0, 200); // 设置场景的大小
//gluOrtho2D(50, 600.0, 50, 400.0);//设置显示模型的场景大小 左下角为0,0点
//清除缓存区的缓存
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1, 1, 0);//设置颜色 rgb 范围0-1
glRectf(0, 0, 100, 100);//矩形绘制
glColor3f(1, 0, 0);
glRectf(100, 0, 200, 100);//矩形绘制
glColor3f(0, 1, 1);
glRectf(0, 100, 100, 200);//矩形绘制
glColor3f(0, 0, 1);
glRectf(100, 100, 200, 200);//矩形绘制
//glPopMatrix();
glFlush();//刷新缓存区并输出
}
void main(int arg, char** argv){
glutInit(&arg, argv);//初始化
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);//显示模式 rgb 单缓存
glutInitWindowPosition(50, 100);//设置窗口位置
glutInitWindowSize(400, 400);//设置窗口大小
glutCreateWindow("opengl");//创建窗口并设置标题
glutDisplayFunc(mydisplay);//设置显示回调函数
glutMainLoop();//进入消息循环,持续显示,当窗口改变时候视图也可以刷新
}
例子二:w的大小为v的2倍,o的大小为w的一半,那么o在w的显示为w的宽高各一半,因为v控制着o在w的大小,w等于v相当于控制o在w的投影为w的大小,o在w的投影为w的一半大小
效果图
代码
#include"glut.h"
void mydisplay(void){
//设置背景颜色rgba 范围0-1
glClearColor(1, 1, 1, 0);
//glMatrixMode(GL_PROJECTION); // 设置投影参数
glViewport(0,0,400,400);
glLoadIdentity();//移动后不会消失
gluOrtho2D(0.0, 200, 0.0, 200); // 设置场景的大小
//gluOrtho2D(50, 600.0, 50, 400.0);//设置显示模型的场景大小 左下角为0,0点
//清除缓存区的缓存
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1, 1, 0);//设置颜色 rgb 范围0-1
glRectf(0, 0, 100, 100);//矩形绘制
glColor3f(1, 0, 0);
glRectf(100, 0, 200, 100);//矩形绘制
glColor3f(0, 1, 1);
glRectf(0, 100, 100, 200);//矩形绘制
glColor3f(0, 0, 1);
glRectf(100, 100, 200, 200);//矩形绘制
//glPopMatrix();
glFlush();//刷新缓存区并输出
}
void main(int arg, char** argv){
glutInit(&arg, argv);//初始化
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);//显示模式 rgb 单缓存
glutInitWindowPosition(50, 100);//设置窗口位置
glutInitWindowSize(800, 800);//设置窗口大小
glutCreateWindow("opengl");//创建窗口并设置标题
glutDisplayFunc(mydisplay);//设置显示回调函数
glutMainLoop();//进入消息循环,持续显示,当窗口改变时候视图也可以刷新
}
例子三:w的大小为v的2的二分之一,o的大小为w的一半,那么o在w的显示为w的2倍,因为v控制着o在w的大小,w等于v相当于控制o在w的投影为w的2倍,o在w的投影为w的2背,只不过w的大小限制了显示这能为其中一部分,因为显示不能超过w的大小。因为从左下角为原点扩大了两倍,所以显示的为左下角一个正方形
效果图
代码
#include"glut.h"
void mydisplay(void){
//设置背景颜色rgba 范围0-1
glClearColor(1, 1, 1, 0);
//glMatrixMode(GL_PROJECTION); // 设置投影参数
glViewport(0,0,400,400);
glLoadIdentity();//移动后不会消失
gluOrtho2D(0.0, 200, 0.0, 200); // 设置场景的大小
//gluOrtho2D(50, 600.0, 50, 400.0);//设置显示模型的场景大小 左下角为0,0点
//清除缓存区的缓存
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1, 1, 0);//设置颜色 rgb 范围0-1
glRectf(0, 0, 100, 100);//矩形绘制
glColor3f(1, 0, 0);
glRectf(100, 0, 200, 100);//矩形绘制
glColor3f(0, 1, 1);
glRectf(0, 100, 100, 200);//矩形绘制
glColor3f(0, 0, 1);
glRectf(100, 100, 200, 200);//矩形绘制
//glPopMatrix();
glFlush();//刷新缓存区并输出
}
void main(int arg, char** argv){
glutInit(&arg, argv);//初始化
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);//显示模式 rgb 单缓存
glutInitWindowPosition(50, 100);//设置窗口位置
glutInitWindowSize(200, 200);//设置窗口大小
glutCreateWindow("opengl");//创建窗口并设置标题
glutDisplayFunc(mydisplay);//设置显示回调函数
glutMainLoop();//进入消息循环,持续显示,当窗口改变时候视图也可以刷新
}