OpenGL实践之第一个窗口

OpenGL实践之第一个窗口

DionysosLai 906391500@qq.com

引言:

        OpenGL 经过多年的发展,到目前为止已经发生了全新的变化,从原本已函数为中心方法,转变成已桌上技术为中心。引用《OpenGL权威指南》 第八版中一段话:

本书的内容是颠覆性的!对于那些已经阅读过本书以前版本的读者来所,这一版完全根据OpenGL应用程序开发的最新方法和技术进行了重新。本书将经典红宝书的以函数为中心的方法,与《OpenGL着色语言》(通常也被称作橘皮书)一书中的着色技术进行了融合。[1]

        因此,通过本系列教程,希望大家对全新的OpenGL技术有个基本的认识,并且能够初步入门,并在将来的时间,我们可以一起畅谈这方面技术。

在阅读本书时,最好手本能够有《OpenGL 权威指南》一书,每篇文章结尾,会附录书中相关知识点和阅读页码等。


准备工作:

        在OpenGL中并没有特别指定任何创建和操作窗口函数。因此每一个操作系统会专门提供一个接口,这个接口绑定了OpenGL和其窗口系统。Microsoft提供了WGLMacOS提供了CGL

        GLUT库(OpenGL Utility Tookit)可以直接操作这些接口并在窗口中显示图形,有了这个库,我们就可以从图形接口中解放出来。GLUT原本是红宝书第二版中的示例程序。自那以后,由于其简单、跨平台的特点,使其在各种应用中广泛应用[3]  freeglutGlut库的一个 开源实现。


配置工作:

Windows:

        下载freegluthttps://sourceforge.net/projects/freeglut/files/latest/download  

        解压只用,看下文档  README.win32。使用 CMake 创建vs项目文件。然后使用vs2013软件编译项目文件。下一步开始配置工作。

        include\GL里面所有的.h文件复制到D:\Microsoft Visual Studio 10.0\VC\include文件夹,需要创建GL文件夹

        把bin里面的freeglut.dll复制到C:\Windows\System32文件夹里,把freeglut.lib复制到D:\Microsoft Visual Studio 10.0\VC\lib里(注意,这里是64位机器,放在文件夹SysWOW64中,同时,dlldebugrelease两个版本,使用哪个,取决于自己项目要求)[2]


代码大纲:

        #include <gl/freeglut.h>

        添加freeglut 头文件。使用freeglut.h文件,就不要包含gl.h或者glu.h文件


        glutInit(&argc, argv);

        对GLUT进行初始化,并处理所有的命令行参数。 应该在调用其他任何GLUT函数之前调用。


        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);

        配置一些GLUT模式,GLUT_DOUBLE,开启双缓冲模式,注意开始双缓冲模式,在显示时,必须调用glutSwapBuffers(), 与值对应是GLUT_SINGLE 单缓存模式;  GLUT_RGBA开始颜色RGB模式,与之对应是GLUT_INDEX,颜色索引模式。


        glutInitWindowSize(500, 500);

        glutInitWindowPosition(100, 100);

        glutCreateWindow("01");

        配置窗口参数,并创建窗口。


        glClearColor(0.0, 0.0, 0.0, 0.0);

        渲染并不是一个简单的过程,我们必须指定各种着色器、缓冲和标志位等。另一方面,我们经常希望在一些渲染操作中,能够保持同样的一些配置参数。因此,OpenGL采用状态机模式,并在状态机中设置保存标志位和值。

        这里,我们设置了清楚帧缓存时颜色。颜色有4个通道(RGBA)值,并且值在0.0到1.0之间。


        glutDisplayFunc(display);

        窗口系统中,大部分的交互是通过回调函数实现。这里设置了显示回调(display callback),即GLUT在每次更新窗口内容的时候会自动调用display 函数。像回调函数,还有其他一些回调函数,比如用户输入、重设窗口尺寸等不同操作。


        glutMainLoop();

        这个函数将窗口控制权交给GLUT,开启内部无限无限循环。在这个循环中,函数会监听窗口和操作系统。这些监听包括窗口重绘,用户输入等。在本章中,我们注册了一个显示显示回调函数,因此我们可以渲染画面。


        void display()

        {

                glClear(GL_COLOR_BUFFER_BIT);

                glutSwapBuffers();

                glFlush();

        }

        这个我们注册的显示回调函数。在这里,我们只做了最简单的帧缓冲清除工作,使用的颜色就是上面glClearColor接口中配置的颜色。glutSwapBuffers() 函数 是告诉GLUT 交换前缓存和后缓存角色。这个接口是必须调用的,因为我们之前GLUT模式时,开启双缓冲模式。

        本章教程到此结束,下一章我们将学习如何绘制一个三角形。最后,祝大家三八节快乐了。


[延伸阅读]:

[1] 《OpenGL 编程指南》前言 第三版。

[2]  http://blog.csdn.net/xuguangsoft/article/details/8002375

[3] http://baike.baidu.com/item/freeGLUT  

[4]《OpenGL 编程指南》前言 第三版。P10 ~P12。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值