第一个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(300, 300);glutInitWindowSize(300, 300);glutCreateWindow("第一个OpenGL程序");glutDisplayFunc(&display);glutMainLoop();return 0;
}

保存->本地调试:

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

至此,我们的第一个openGL程序就此结束!

接下来针对这段代码,作一个简要的解析:

 1 //demo.cpp2 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()事件循环主函数,就是将与“事件”相关的代码无限循环;(内存泄漏问题

运行结果:

 

转载于:https://www.cnblogs.com/eco-just/p/10659968.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hdu 2544 最短路

Problem Description在每年的校赛里&#xff0c;所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候&#xff0c;却是非常累的&#xff01;所以现在他们想要寻找最短的从商店到赛场的路线&#xff0c;你可以帮助他们…

DataGridView 写入到EXCEL

usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Windows.Forms;usingMicrosoft.Office.Interop.Excel;usingSystem.Xml;usingSystem.Xml.Serialization;usingSystem.IO;namespacetxt批处理{ class 保存 { internal static bool 写入E…

Git和Github的学习

来源&#xff1a; 秦时明月NightTiger Git和Github的学习 作者声明&#xff1a;本博客中所写的文章&#xff0c;都是博主自学过程的笔记&#xff0c;参考了很多的学习资料&#xff0c;学习资料和笔记会注明出处&#xff0c;所有的内容都以交流学习为主。有不正确的地方&#xf…

在asp.net中做视频转换,将各种视频文件转换成.flv格式

首先&#xff0c;我们部署一下文件夹.在工程的目录下新建几个文件夹如下图&#xff1a;UpFiles文件夹是要保存你上传的文件&#xff0c;PlayFiles文件夹是用于你转换后保存的文件&#xff08;用于网上播放&#xff09; ImgFile文件夹是保存截取视频文件的图片&#xff0c;然后那…

Android实现支付宝AR功能,Android接入支付宝实现支付功能实例

我本来是想直接讲Android支付这一块的&#xff0c;包括支付宝&#xff0c;微信&#xff0c;其他第三方整合支付等&#xff0c;但是微信开放平台他对我的账号做了限制&#xff0c;所有我今天就先把重心放在支付宝的支付上&#xff0c;也算是写得尽可能详细些吧&#xff0c;毕竟是…

android系统的发展态势,2020年安卓手机发展的7个趋势,只有延伸,并无革命性的变化...

在2019年&#xff0c;国内的几家手机厂家都是有得有失&#xff0c;虽然华为在国内大杀四方&#xff0c;但是海外市场遇到了一些麻烦&#xff0c;OPPO和VIVO也开始走性价比路线了&#xff0c;但是国内的市场还是被华为打压的厉害&#xff0c;不过海外发展还可以&#xff0c;至于…

[导入]使用SqlCommand对象执行存储过程

表tbClass存放论坛分类 字段名 字段类型 允许空 说明 ClassID uniqueidentifier 否 GUID主键&#xff0c;默认值newid() ClassName Varchar(50) 否 分类名 表tbBoard存放论坛分类中的版块 字段名 字段类型 允许空 说明 BoardID uniqueidentifier 否 GUID主键…

鸿蒙系统开发资金,华为终于动手,将拿出超十亿资金,开发者们有福了

原标题&#xff1a;华为终于动手&#xff0c;将拿出超十亿资金&#xff0c;开发者们有福了3月份也是慢慢地要过完了&#xff0c;4月的到来&#xff0c;仿佛是一个讯号&#xff0c;毕竟鸿蒙即将上线&#xff0c;大家都在期待着这款华为国产的系统&#xff0c;究竟能有什么表现&a…

Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un

ylbtech-Java-Runoob-高级教程-实例-数组&#xff1a;10. Java 实例 – 查找数组中的重复元素1.返回顶部 1、Java 实例 - 查找数组中的重复元素 Java 实例 以下实例演示了如何在 java 中找到重复的元素&#xff1a; Main.java 文件 public class MainClass {public static void…

[导入]ServerVariables集合

APPL_PHYSICAL_PATH检索与元数据库路径相应的物理路径。AUTH_TYPE这是用户访问受保护的脚本时&#xff0c;服务器用于检验用户的验证方法。CERT_COOKIE客户端验证的唯一ID&#xff0c;以字符串方式返回。CERT_SERIALNUMBER用户验证的序列号字段。CERT_SERVER_ISSUER服务器验证的…

华为android9.0升级,华为官方更新消息:这几款手机9月5日分批推送安卓9.0系统升级...

原标题&#xff1a;华为官方更新消息&#xff1a;这几款手机9月5日分批推送安卓9.0系统升级随着手机技术的不断发展&#xff0c;不仅手机更新换代加快&#xff0c;就连手机系统也在快速更新&#xff0c;可能很多花粉刚刚升级了基于Android8.0的EMUI8.0系统&#xff0c;对于Andr…

python中strip、startswith、endswith

python中strip、startswith、endswith strip(rm)用来删除元素内的空白符&#xff1a; rm对应要删除空白符的元素&#xff0c;当rm为空(strip())时删除所有元素的空白符 startswith、endswith用来查找开头或结尾条件的元素 例子&#xff1a; 1 li ["alec", " ar…

android终端系统时间,安卓应用修改系统时间

前言通常&#xff0c;我们来获取系统时间来做一些事情&#xff0c;那么&#xff0c;如何设置系统时间呢&#xff1f;问题抛出来&#xff0c;解决方法也就应运而生了。解决方法命令行首先我想到的是手机root&#xff0c;然后命令行date -s 要设置的时间复制代码如果手机没 root …

android红米3调用相机,红米3有什么接口?红米3有HDMI接口吗?

小米红米手机3有什么接口小米红米手机3有3.5mm耳机接口&#xff0c;microUSB充电和数据接口(采用5V/2A标准充电头)。那么小米红米手机3有什么接口?小米红米手机3采用金属机身&#xff0c;其背面由4166颗星星成菱形排列&#xff0c;设计灵感来自夜空中的繁星。当光线游走在圆点…

第二十一天

唉&#xff0c;前一段时间Hotle不能上网了&#xff0c;真是郁闷。 来日本整整三个星期了&#xff0c;天天写文档&#xff0c;真是烦死了。 不过幸好我的客户是个大美女&#xff0c;不到三十&#xff0c;还没结婚呢&#xff0c;哈哈。前两天他们举行新年会的时候&#xff0c;还给…

SAP OData $batch processing

例として、1回の呼び出しで100個の新しい商品を作成したい場合、最も簡単な方法は、$ batch要求を使用して100個のPOST呼び出しすべてを単一のサービス呼び出しにまとめることです。 URIの末尾にsap-statistics trueオプションを追加すると、所要時間についての詳細が表示され…