第一个openGL程序
一、工具的安装
因为要写C++程序,为了便捷,这里我安装的Visual Studio;

免费使用90天!安装好了之后,我们要为我们的开发安装相应的工具集;
因为我是要在windows上跑的,所以选择如下两个包:

选择完之后进行安装(3.7个G)
二、辅助头文件
因为我们要用openGL来画图形,所以要使用到界面工具,这里采用GLUT(《opengl编程指南第八版》用的是glut);
相关包请自行百度:

接下来就是5个文件的放置了:
①.h头文件(在这里指glut.h)

②.lib包文件(在这里指glut.lib和glut32.lib)

③.dll动态链接库文件(在这里指glut.dll和glut32.dll)

把这两个文件在上述两个文件夹中都放置一次,即:
System32/glut.dll、System32/glut32.dll;
SysWOW64/glut.dll、SysWOW64/glut32.dll;
三、新建第一个openGL程序
文件->新建->项目:

在这我们不使用模板,因为暂时对这些模板不是很熟悉,选择之后下一步填写项目名称和存放路径,创建。

然后,你可以在源文件右键点击添加->新建项(或者快捷键ctrl+shift+A):

然后在新添加的.cpp文件里复制如下代码:
#include <GL/glut.h>
void display(void) {
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(, );
glutInitWindowSize(, );
glutCreateWindow("第一个OpenGL程序");
glutDisplayFunc(&display);
glutMainLoop();
return ;
}
保存->本地调试:

短暂的等待之后,我们就能看到程序运行的结果了(窗口中画了一个白底的正方形):

至此,我们的第一个openGL程序就此结束!
接下来针对这段代码,作一个简要的解析:
1 //demo.cpp
2
3 #include <GL/glut.h>
4 void display(void) {
5 glClear(GL_COLOR_BUFFER_BIT);
6 glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
7 glFlush();
8 }
9
10 int main(int argc, char* argv[]) {
11 glutInit(&argc, argv);
12 glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
13 glutInitWindowPosition(300, 300);
14 glutInitWindowSize(300, 300);
15 glutCreateWindow("第一个OpenGL程序");
16 glutDisplayFunc(&display);
17 glutMainLoop();
18 return 0;
19 }
这个demo代码量很少,但是麻雀虽小五脏俱全,然我们一起来看看吧。
line3:引入glut头文件;
line5:glClear(arg)表示清除指定缓冲区(可以理解为初始化背景色),可选参数如下
- GL_COLOR_BUFFER_BIT: 当前可写的颜色缓冲
- GL_DEPTH_BUFFER_BIT: 深度缓冲
- GL_ACCUM_BUFFER_BIT: 累积缓冲
- GL_STENCIL_BUFFER_BIT: 模板缓冲
line6:glRectf()表示根据左下角坐标(-0.5f,-0.5f)和右上角坐标(0.5f,0.5f)绘制矩形;
line7:glFlush(),一般情况下,我们提交给OPENGL的指令并不是马上送到驱动程序里执行的,而是放到一个缓冲区里面,等这个缓冲区满了再一次性发到驱动程序里执行;很多时候只有几条指令是填充不满那个缓冲区的,这就是说这些指令根本没有被发送到驱动里,所以我们要调用glFlush来强制把这些指令送到驱动里进行处理。
line11:glutInit(&argc, argv),固定写法,初始化 GLUT 库;
line12:glutInitDisplayMode(arg),设置显示模式,参数可以为组合参数,上述代码表示指定RGB颜色模式的窗口,指定单缓存窗口;
line13:glutInitWindowPosition(x,y),初始化设置窗口位置;
line14:glutInitWindowSiz(width,height),初始化设置窗口大小;
line15:glutCreateWindow(title),创建窗口,参数为窗口标题;
line16:glutDisplayFunc(void Fuc);glut调用用户自定义的绘图函数;
line17:glutMainLoop()事件循环主函数,就是将与“事件”相关的代码无限循环;(内存泄漏问题)
运行结果:

第一个openGL程序的更多相关文章
- OpenGL--第一个OpenGL程序
环境:VS2012 + OpenGL所需文件(其他IDE也可以,不一定要VS2012,VS2010或其他也可以) 步骤: 1.下载Vs2012 2.下载OpenGL所需文件 3.解压缩OpenGL包并 ...
- OpenGL学习-------visual studio 2010配置和第一个OpenGL程序讲解
OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenG ...
- 【VS开发】【OpenGL开发】OpenGL---Windows下配置与第一个OpenGL程序
面记录一下Windows下配置OpenGL与我的第一个OpenGL程序. 第一步:选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Bu ...
- 【OpenGL】详解第一个OpenGL程序
写在前面 OpenGL能做的事情太多了!很多程序也看起来很复杂.很多人感觉OpenGL晦涩难懂,原因大多是被OpenGL里面各种语句搞得头大,一会gen一下,一会bind一下,一会又active一下. ...
- OpenGL学习笔记:第一个OpenGL程序
OpenGL环境搭建参考博客:VS2015下OpenGL库的配置. #include<GL\glew.h> #include<GLTools.h> #include<GL ...
- (7)nehe教程1 创建一个OpenGL窗口:
不要用那个nehe ndk了 误人子弟! 转自: 一个窗口,代码可真多啊 http://www.yakergong.net/nehe/ 在这个教程里,我将教你在Windows环境中创建OpenGL程序 ...
- 建立第一个OpenGL工程(GLUT)
本文参考了<计算机图形学>(Donald Hearn著)的第2.9节. OpenGL基本函数库用来描述图元.属性.几何变换.观察变换和进行许多其他的操作.OpenGL被设计成与硬件无关,因 ...
- 在 MacOS 上编译链接 OpenGL 程序
几个星期以前开始折腾在我的MBA上写 OpenGL 小程序.我不太熟悉MacOS上的开发工具比如XCode,所以一开始的想法就是用vim来写程序,然后手工编译链接.网上查了一下,MacOS上的Open ...
- 【Android Developers Training】 62. 搭建一个OpenGL ES环境
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
随机推荐
- 基于Python的交互式可视化工具 [转]
前几天发现一个可视化工具Dash,当看到它的交互式效果后突然就觉得眼前一亮.早就想写出来分享给大家,今天利用睡前一点时间发出来,希望能给有需要的朋友带来一点帮助或者多一个参考. Dash介绍 在Pyt ...
- centos7 安装python3.6 及模块安装演示
目录: 下载python3.6 安装python3.6的依赖 编译安装 更改链接 更改yum脚本的python依赖 修改gnome-weaktool配置文件 修改urlgrabber配置文件 1.下载 ...
- 解决FlexPaper分页分段加载问题(转)
FlexPaper是一个开源的PDF文档在线查看控件.用户查看PDF文档不需要安装Acrobat Reader,但需要利用像SwfTools这样的工具预先将PDF文档转成SWF格式的文件.FlexPa ...
- 记录:EPALN Electric P8 2.4.4.8366 安装记录
系统:win7 32位 旗舰版. (原版系统 非GHOST) 第一步:解压安装. setup.exe 右击 选择 注意:把 360 百度 杀毒之类的全部关闭 第二步: 第三步: 第四步: 第五 ...
- king 选 太子
king 选 太子 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 啊,从前有一个国家.此国兵强马壮,但是国王却身体不好.于是就想挑一位太子出来: 但是问题来了,国王 ...
- 1.初步认识JVM -- JVM序列
1.JVM概念 JVM是java Virtual Machine的简称.也称为Java虚拟机. 虚拟机:通过软件模拟具有完整硬件功能的运行在一个完全隔离环境的完整计算机系统.VMWare.Visual ...
- java基础类型中的char和byte的辨析及Unicode编码和UTF-8的区别
在平常工作中使用到char和byte的场景不多,但是如果项目中使用到IO流操作时,则必定会涉及到这两个类型,下面让我们一起来回顾一下这两个类型吧. char和byte的对比 byte byte 字节, ...
- MySQL从删库到跑路(一)——MySQL数据库简介
作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.MySQL简介 1.MySQL简介 MySQL是一个轻量级关系型数据库管理系统,由瑞典MySQL AB公司开发, ...
- EditPlus 4.3.2475 中文版已经发布(10月28日更新)
新的修订版修复了上移多个插入点时会造成程序崩溃的问题.
- struts2中的错误--java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
2013-4-7 10:13:56 org.apache.catalina.startup.HostConfig checkResources 信息: Reloading context [/chap ...