绘制一个标准的GUI窗口

通过几天的基础的学习,在这里总结一下吧。

  1. #include<glut.h>
  2. ///绘制场景
  3. void RenderScene(void)
  4. {
  5.    //用当前颜色清除窗口
  6.    glClear(GL_COLOR_BUFFER_BIT);
  7.    //刷新窗口
  8.    glFlush();
  9. }
  10. //设置渲染状态
  11. void SetupRC(void)
  12. {
  13.    glClearColor(0.0f,0.0f,1.0f,1.0f);//前三个参数为RGB值,这里设为蓝色背景
  14.                                      //第四个为ALPHA值,用于混合
  15. }
  16. //主程序入口
  17. void main(void)
  18. {
  19.    //设定窗口模式:使用单缓冲和RGBA颜色模式
  20.    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  21.    //创建窗口
  22.    glutCreateWindow("Test");
  23.    //将RenderScene函数设定回调函数
  24.    glutDisplay(RenderScene);
  25.    //绘制
  26.    SetupRC();
  27.    //启动GLUT框架运行
  28.    glutMainLoop();
  29. }

OpenGL提供GLUT框架来帮助我们简化开发,可以到百度或者GOOGLE搜索下载。

基本的窗口绘制出来了,下面再往窗口上绘制一个矩形:

 

  1. //1.设定绘制颜色在RenderScene函数里
  2. void RenderScene(void)
  3. {
  4.    ///....
  5.    //设定颜色为红色
  6.    glColor3f(1.0f,0.0f,0.0f);
  7.    //用当前颜色绘制一个填充矩形(left,top,right,bottom)
  8.    glRectf(-25.0f,25.0f,25.0f,-25.0f);
  9.    //
  10.    glFlush();
  11. }
  12. //2.还需要添加一个函数就是当窗口改变时矩形也要随之改变
  13. void ChangeSize(GLsizei w,GLsizei h)
  14. {
  15.    GLfloat aspectRatio;
  16.    //防止被0除
  17.    if(h == 0)
  18.      h = 1;
  19.    //调整窗口
  20.    glViewPort(0,0,w,h);
  21.    //重置坐标系统
  22.    glMatrixMode(GL_PROJECTION);
  23.    glLoadIdentity();
  24.    //建立裁剪区(l,t,r,b);
  25.    aspectRatio = (GLfoat)w/(GLfoat)h;
  26.    if(w <= h)
  27.       glOrho(-100.0f,100.0f,-100.0/aspectRatio,100.0/aspectRatio,1.0f,-1.0f);
  28.    else
  29.       glOrho(-100.0*aspectRatio,100.0*aspectRatio,-100.0f,100.0f,1.0f,-1.0f);
  30.    glMatrixMode(GL_MODELVIEW);
  31.    glLoadIdentity();  
  32. }
  33. //3.修改主函数
  34. void main(void)
  35. {
  36.     //...
  37.     //设置回调
  38.     glReshapeFunc(ChangeSize);
  39.     SetupRC();
  40.     //...
  41. }

这样一个带有红矩形和蓝色背景的窗体就出现了,如图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值