上次已经搭好了OpenGL编程的环境。已经成功运行了第一个程序。可只是照搬书上的代码,并没弄懂其中的原理。这次通过一个小程序来解释使用GLUT库编写OpenGL程序的过程。

  1. 程序的入口

    与其他程序一样main()函数是程序的入口,由(window)操作系统调用,然后我们把需要实现的代码在main()函数里调用。
  2. 设置初始显示模式

    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);定义窗口的显示模式。其中有颜色的模式和缓冲区的模式等。如果设置多种模式,中间使用“|”号隔开。例如上面的代码使用的GLUT_SINGLE是单缓冲区的模式,另一种缓冲模式是双缓冲模式。GLUT_RGB指的是颜色的模式是使用RGB染色的模式,颜色模式还有GLUT_RGBA。

    GLUT_SINGLE模式和GLUT_DOUBLE模式的区别是,GLUT_SINGLE模式的绘图命令是在显示的窗口中执行,用户(可能)会看到绘图的过程。而GLUT_DOUBLE缓冲模式的绘图过程是在显示窗口意外的场景完成,把整个绘图任务完成后,再把完成后的绘图显示到显示窗口上(用户看到的是完成后的图形)。

  3. 创建一个窗口

    glutCreateWindow(“第一个窗口”);调用GLUT库里的函数在屏幕上显示一个窗口,标题为“第一个窗口”

  4. 添加显示窗口的回调函数

    glutDisplayFunc(renderScene); 绘制窗口时,会调用renderScene(我们创建的函数,我们可以在这个函数里处理绘制窗口我们需要实现的效果)。在显示窗口或者改变窗口大小(重绘窗口)等时,就会调用我们注册的毁掉函数renderScene。

  5. 显示窗口时回调函数的内容

    void renderScene(void){
    glClear(GL_COLOR_BUFFER_BIT);
    glFlush();
    }

    glClear()函数表示清空缓冲池,参数表示需要清空的缓冲池,例如GL_COLOR_BUFFER_BIT 表示清空颜色缓冲池。如果需要清空多个缓冲池,输入的参数使用“|”隔开。

    glFlush();表示执行等待执行的OpenGL指令。由于考虑到性能的问题,并不是每一个OpenGL指令都会马上执行,经常把多个指令存放在一个指令队列中。如果调用glFlush()函数,会把所有等待执行的OpenGL指令马上执行,刷新OpenGL指令队列。

  6. 初始化渲染颜色

    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);设置渲染颜色,使用RGB模式,第一个参数表示R,第二第三个分别表示G,B,最后一个表示透明度。它们的取值范围都为0.0-1.0。

  7. 循环回调

    glutMainLoop();退出该窗口前都会不断回调该函数。这个函数主要处理一些与操作系统等相关的消息。

完整代码:



运行效果:

OpenGL编程(一)渲染一个指定颜色的背景窗口的更多相关文章

  1. OpenGL编程逐步深入(三)在窗口中显示一个三角形

    这一节教程的内容会比较少,我们仅仅是对上一节教程中的代码进行扩展,在窗口中渲染一个三角形出来. 本节我们以下图所示正方形来讲解OpenGl中的坐标系统.当沿着Z轴负方向看时,可见顶点的坐标必须在这个正 ...

  2. 用MFC实现OpenGL编程

    一.OpenGL简介 众所周知,OpenGL原先是Silicon Graphics Incorporated(SGI公司)在他们的图形工作站上开发高质量图像的接口.但最近几年它成为一个非常优秀的开放式 ...

  3. Opengl编程指南第二章:状态管理、几何绘图

    //http://blog.csdn.net/longhuihu/article/details/7701874 1.绘图基础 清除窗口 glClearColor(0.0, 0.0, 0.0, 0.0 ...

  4. OpenGL编程指南第九章:纹理映射

    转自://http://blog.csdn.net/longhuihu/article/details/8477614 纹理(texture)是一块矩形数据序列,存储的数据为颜色.亮度.alpha值. ...

  5. Win32 OpenGL 编程( 1 ) Win32 下的 OpenGL 编程必须步骤

    http://blog.csdn.net/vagrxie/article/details/4602961 Win32 OpenGL 编程( 1 ) Win32 下的 OpenGL 编程必须步骤 wri ...

  6. 通过OpenGL理解前端渲染原理(1)

    一.OpenGL OpenGL,是一套绘制3D图形的API,当然它也可以用来绘制2D的物体.OpenGL有一大套可以用来操作模型和图片的函数,通常编写OpenGL库的人是显卡的制造者.我们买的显卡都支 ...

  7. OpenGL 编程指南 (3.1)

    1.OpenGL使用的是RGB颜色空间,例如三个颜色分量各占8位,那么就说这个颜色值色深24,能够表示2^24中颜色. 2.多重采样是基于采样的抗锯齿技术,有OGAA(ordered grid ant ...

  8. OpenGL编程指南(第七版)

    OpenGL编程指南(第七版) 转自:http://blog.csdn.net/w540982016044/article/details/21287645 在接触OpenGL中,配置显得相当麻烦,特 ...

  9. Direct3D 11 Tutorial 2: Rendering a Triangle_Direct3D 11 教程2:渲染一个三角形

    概要 在之前的教程中,我们建立了一个最小的Direct3D 11的应用程序,它用来在窗口上输出一个单一颜色.在本次教程中,我们将扩展这个应用程序,在屏幕上渲染出一个单一颜色的三角形.我们将通过设置数据 ...

随机推荐

  1. How to Hide Zip Files Inside a Picture Without any Extra Software in Windows

    http://www.howtogeek.com/119365/how-to-hide-zip-files-inside-a-picture-without-any-extra-software/ c ...

  2. zzuoj--10424--无聊的课(简单几何)

    10424: 无聊的课 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 81  Solved: 16 [Submit][Status][Web Boar ...

  3. centos6.0 配置SVN

    基本步骤: 1.安装必需的subversion 2.创建版本库 3.配置用户和权限 4.钩子和svn常用命令说明 一.安装subversion 在这里我们使用yum来安装subversion,使用以下 ...

  4. Web前端错题模糊题记录

    title: Web前端错题模糊题记录 toc: true date: 2018-09-20 10:04:36 categories: Web tags: HTML CSS JavaScript HT ...

  5. pip更新问题

    pip更新及Requirement already up-to-date解决方法 pip更新 更新命令 将pip更新版本 1 python -m pip install --upgrade pip R ...

  6. HTTP的请求及响应

    前言 本文主要包括以下内容: HTTP是什么? HTTP 请求包括哪些部分? HTTP 响应包括哪些部分? 如何用Chrome开发者工具查看 HTTP 请求及请求的内容? 如何使用 curl 命令? ...

  7. 浏览器输入一个url的过程,以及加载完html文件和js文件的标志

    简单理解: 当在浏览器地址栏输入一url时,浏览器会做以下几个步骤: 1.将url转化为ip地址,也就是DNS解析,(先找本地host文件中是否有对应的ip地址,如果有就直接用,没有的话,就按域名的二 ...

  8. RabbitMQ笔记(3)

    消息从产生--->结束 1.生产者--->交换机--->队列--->消费者 2.生产者--->交换机--->队列 首先: 生产者:Exchange = n:1 Ex ...

  9. solarwinds之网络发现

    1.  首先需要添加网络发现   2.  使用public   3.  添加主机   4.  网络地址选择   5.  默认下一步   6.  运行发现   7.  扫描结构如下   8.  下一步 ...

  10. 用AI识别内部人威胁面临的道德规范

    用AI识别内部人威胁面临的道德规范 还记得汤姆·克鲁斯的<少数派报告>吗?人工智能可识别昭示未来风险的员工行为.该如何有效且有道德地使用这一数据呢? 为保护公司网络不受恶意软件.数据渗漏和 ...