glViewPort()和gluOrtho2D()和glutInitWindowSize()区分

* 首先介绍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();//进入消息循环,持续显示,当窗口改变时候视图也可以刷新
}
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值