第一个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()事件循环主函数,就是将与“事件”相关的代码无限循环;(内存泄漏问题)
运行结果:
最新文章
- android studio关联genymotion模拟器,未显示设备
- wcf系列学习5天速成——第三天 事务的使用
- 通过gradle运行测试脚本(转)
- RabbitMQ消息队列之二:消费者和生产者
- (翻译)使用Api分析器与Windows兼容包来编写智能的跨平台.NET Core应用
- FFT总结
- 敏捷项目需求拆解&;发现用户故事
- python常用命令(持续) | Commonly used Python command list (con&#39;t)
- 深入浅出—Redis集群的相关详解
- java中构造代码块、方法调用顺序问题
- dtrace 相关资料
- ubuntu:如何制作类似jeso的系统?
- 连接SDE空间数据库——SQL Server篇
- DB杂记
- IIS7 使用server farms 进行负载均衡
- Linux下性能监控的三把军刀
- JQuery元素选择
- CentOS6.8 安装rar解压缩
- Java调用本地接口:java.lang.UnsatisfiedLinkError
- java.sql.SQLException: The server time zone value &#39;&#214;&#208;&#185;&#250;&#177;&#234;&#215;&#188;&#202;&#177;&#188; 解决方案
热门文章
- Codeforces Round #534 (Div. 2) Solution
- hdu1199 线段树
- consul 配置
- Windows Server 2008 R2 web服务器发布在线系统时遇到的问题
- SQL Server2008创建数据库语法
- The current .NET SDK does not support targeting .NET Core 3.0
- Today&#39;s harvest !!!
- UVa 1637 纸牌游戏(全概率公式)
- poj 2828 Buy Tickets 树状数组
- c++ 列表删除元素(erase)