openGL初学者(C++)
1. 配置openGL环境
第一步,选择一个编译环境
这里我选择Visual Studio 2013作为学习OpenGL的环境。
第二步,安装GLUT工具包
首先,下载glut工具包:点击下载glut库。解压后,得到5个文件:glut.h,glut.dll,glut32.dll,glut.lib,glut32.lib。
下面以VS2013为例,VS2010,VS2015与之类似,VS2017有点不同。
Windows环境下安装GLUT的步骤:
1. 把解压得到的glut.dll和glut32.dll放在C:\Windows\system32文件夹内(32位系统)或 C:\Windows\SysWOW64(64位系统)。
- 把解压得到的glut.h复制到Visual Studio 2013的安装目录(路径)下的"\VC\include\gl"文件夹中,如果没有gl这个文件夹则新建一个。VS2013的默认安装路径为 C:\Program Files\Microsoft\Visual Studio 13.0。
3. 把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(如果是VS2013,则是其安装目录下面的"VC\lib"文件夹)。
第三步,写第一个openGL程序
(1) 打开VS2013,新建一个Win32 Console Application(控制台应用程序),在向导中的Application Settings(应用程序设置),找到附加选项中的Empty project(空项目),并勾选上。
(2) 右键点击源文件,添加新建项后,选择C++文件,即可开始我们的第一个openGL程序。
(3) 第一个简单的openGL程序(可以直接复制到VS环境中运行,笔者建议自己动手打代码)
#include <GL/glut.h>
void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
}
void myDisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一个OpenGL程序");
init();
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
该程序运行后,在一个黑色的窗口会出现一个白色的矩形。运行效果如下:2.openGL入门
1. 头文件
程序需要包含头文件glut.h。
#include <GL/glut.h>
这是GLUT的头文件。 本来OpenGL程序一般还要包含<GL/gl.h>和<GL/glu.h>,但glut.h的头文件中已经自动将这两个文件包含了,不必再次包含。
2. main函数
int main(int argc, char *argv[])
{
//此处省去其他语句
return 0;
}
这个是带命令行参数(必须写出)的main函数。
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一个OpenGL程序");
glutDisplayFunc(&myDisplay);
glutMainLoop();
以glut开头的函数都是GLUT工具包所提供的函数,下面常用的函数进行介绍。
glutInit(&argc, argv)
对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE)
设置显示方式,其中:
GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。
GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。glutInitWindowPosition(100, 100)
设置窗口在笔记本电脑屏幕中的位置(100,100)。glutInitWindowSize(400, 400)
设置窗口的大小(400X400)。glutCreateWindow("第一个OpenGL程序")
根据前面设置的信息创建窗口。"第一个OpenGL程序"参数将被作为窗口的标题。
注意:窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。glutDisplayFunc(&myDisplay)
设置回调函数,当需要进行画图时,myDisplay这个函数就会被调用。(笔者这个说法不够准确)。glutMainLoop
启动程序执行,进行消息处理循环。(这个函数可以显示窗口,并且等待窗口关闭后才会返回)
3. 回调函数myDisplay和自定义初始函数init
通过 glutDisplayFunc(&myDisplay)
,我们设置了“当需要画图时,请调用myDisplay函数”。
观察myDisplay中的三个函数,不难发现都以gl开头(以gl开头的函数都是OpenGL的标准函数)
下面对用到的函数进行介绍。
- glClear,使用清除颜色。GL_COLOR_BUFFER_BIT表示清除颜色。glClear函数的其他作用暂不介绍。
- glRectf,画一个矩形。四个参数分别表示了位于对角线上(左下角和右上角)两个点的横、纵坐标。
- glFlush,保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)。
其作用跟fflush(stdout)类似 - glClearColor 设置背景清除颜色。四个参数前三个(0.0)是rgb值,代表黑色最后一个是设置透明度。
为了避免篇幅太长,笔者在此对openGL不多做介绍了。
其他参考资料