OpenGL中的二维编程——从简单的矩形开始

一、OpenGL的组成

  • 图元函数(primitive function)指定要生成屏幕图像的图元。包括两种类型:可以在二维、三维或者四维空间进行定义的几何图元,如多边形;离散实体;位图。
  • 属性函数(attribute function)负责控制图元的外观。这类函数定义了颜色、线型、材质属性、光照以及纹理。
  • 观察函数(viewing function)指定摄像机的属性。OpenGL提供一个虚拟摄像机,我们可相对于由图元函数定义的对象设置该摄像机的位置和朝向。我们也可以控制摄像机的镜头参数,以便制造出广角或长焦效果。
  • 查询函数(query function)允许我们决定某一特定系统的性能以及OpenGL状态变量的取值。
  • 控制函数(control function)允许我们启用或禁用各种OpenGL特性,如消隐、纹理映射和光照等。
  • 输入与窗口函数不属于OpenGL核心库,但是由于它们在交互式程序中的重要地位,这类函数已被包含在GLUT库中。这些函数使我们能够对屏幕中的窗口进行控制并使用鼠标和键盘。

 

二、库组织结构

下图是Linux平台下实现的库组织结构

对于Windows 或 Macintosh平台,也有一张类似的组织结构图。

应用程序既可以使用OpenGL、GLU以及GLX库中的函数,也可以直接使用X库或X工具集中的函数。

另外还有一种折衷的方法是借助GLUT库,这样可以使同一个程序能够在不同的平台下重新编译和运行。

 

三、GLUT

void glutInit(int * argc, char ** argv);
//初始化GLUT,应在其他GLUT函数和OpenGL函数之前进行调用。
//glutInit()接收来自main函数的参数,程序可以具体实现相关的方式来使用这些参数

所有的GLUT函数都是以glut为前缀。

函数glutCreateWindow()将一个窗口以默认尺寸(300*300像素)显示在屏幕的默认位置上(屏幕左上角)。该函数的参数使我们可为窗口创建一个标题。

int glutCreatewindow(char * title)
//在屏幕上创建一个窗口,该窗口的标题由参数title给出。
//在多窗口情况下,该函数返回一个标识所创建窗口的整数。

下图是带有GLUT的库组织结构:

 

四、事件循环和回调函数

void glutDisplayFunc(void (*func)(void))
//函数func()在每次需要对窗口重绘时被调用。
void glutMainLoop()
//使程序进入无限事件处理循环。该函数的调用应作为main函数最后一条语句出现

提示:GLUT回调函数的形式是固定的。所以,若要在不同的函数之间进行值传播,可能需要借助全局变量。

 

五、矩形的绘制

void glVertex<234><sifd>(type xcoordinate,type ycoordiante,...)
void glVertex<234><sifd>(type * coordinates)
//指定顶点在二维、三维或思维空间中的位置坐标,坐标值的类型可以是short(s)、int(i)、float(f)或double(d)。
//如果函数名的末尾出现了v,则type为一个指向指定类型的坐标数组的指针。
void glBegin(GLenum mode)
//指定mode类型对象的起始点。mode可取GL_POINTS、GL_LINES或GL_POLYGON
void glEnd()
//指定顶点列表的终止点

提示:在顶点列表的末尾不要忘记包含glEnd()。

void glClear(GLbitfield mask)
//清空mask指示的所有缓存的位。
//其中mask可由定义在gl.h中的常量通过逻辑或运算构成。GL_COLOR_BUFFER_BIT指颜色缓存
void glFlush()
//强制执行之前缓存的所有OpenGL命令

 

六、示例程序

Github地址

 1 #include <GL/glut.h>
 2 void display()  //定义了所要绘制的图形实体
 3 {
 4     glClear(GL_COLOR_BUFFER_BIT);
 5     glBegin(GL_POLYGON);
 6         glVertex2f(-0.5, -0.5);
 7         glVertex2f(-0.5, 0.5);
 8         glVertex2f(0.5, 0.5);
 9         glVertex2f(0.5, -0.5);
10     glEnd();
11     glFlush();
12 }
13 
14 int main(int argc, char ** argv)  //OpenGL的初始化
15 {
16     glutInit(&argc, argv);
17     glutCreateWindow("simple");
18     glutDisplayFunc(display);
19     glutMainLoop();
20 }

 

转载于:https://www.cnblogs.com/OctoptusLian/p/6343194.html

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

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

相关文章

第38天:运算符、字符串对象常用方法

一、运算符 一元操作符 &#xff0c; --&#xff0c; &#xff0c; - 5 -6 逻辑操作符 !&#xff0c; &&&#xff0c; || 基本运算符 , -, *, /, % 关系操作符 >, <, >, <, , , !, ! 赋值 判断 全等 条件操作符 &#xff08;三…

Redux Todos Example

此项目模板是使用Create React App构建的&#xff0c;它提供了一种简单的方法来启动React项目而无需构建配置。 使用Create-React-App构建的项目包括对ES6语法的支持&#xff0c;以及几种非官方/尚未最终形式的Javascript语法 先看效果 这个例子可以帮助你深入理解在 Redux 中 …

python实现软件的注册功能(机器码+注册码机制)

sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId1005269003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare 一、前言&#xff1a;目的&#xff1a;完成已有python图像处理工具的注册功能功能&am…

Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

原文:Win10 UWP开发系列&#xff1a;使用VS2015 Update2ionic开发第一个Cordova App安装VS2015 Update2的过程是非常曲折的。还好经过不懈的努力&#xff0c;终于折腾成功了。 如果开发Cordova项目的话&#xff0c;推荐大家用一下ionic这个框架&#xff0c;效果还不错。对于Cor…

[Swift]LeetCode1035.不相交的线 | Uncrossed Lines

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;➤GitHub地址&a…

php sql语句过滤,php如何做sql过滤

php如何做sql过滤SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序&#xff0c;而这些输入大都是SQL语法里的一些组合&#xff0c;通过执行SQL语句进而执行攻击者所要的操作&#xff0c;其主要原因是程序没有细致地过滤用户输入的数据&#xff0c;致使非法数据侵入…

Oracle Sql 胡乱记

/Oracle查询优化改写/ --1、coalesce 返回多个值中&#xff0c;第一个不为空的值 select coalesce(, , s) from dual; --2、order by -----dbms_random.value 生产随机数,利用随机数对查询结果进行随机排序 select * from emp order by dbms_random.value; --指定查询结果中的一…

Object Pools 喷泉效果实现

摘录自&#xff1a;http://catlikecoding.com/unity/tutorials/object-pools/ 工程 效果图 工程里面有响应的注释 源码我就不单独放出来了

本地模式运行spark streaming程序(win7安装nc命令通信)

2019独角兽企业重金招聘Python工程师标准>>> 首先在win7上安装nc命令 下载nc程序包&#xff0c;放在c盘目录下&#xff0c;cmd打开命令行&#xff0c;进入nc目录&#xff0c;执行&#xff1a;nc -l -L -p 8888开始监控。再打开一个命令行窗口进入nc目录&#xff0c;…

如何用js获取浏览器URL中查询字符串的参数

首先要知道Location这个对象以及这个对象中的一些属性&#xff1a; href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主机名和当前的URL的端口号。本博客首页返回www.cnblogs.com hostname:设置或返回当前URL的主机名。本博客首页返…

计算机系统的数制及转换

1、计算机的数制介绍 数制&#xff1a;计数的方法&#xff0c;指用一组固定的符号和统一的规则来表示数值的方法 数位&#xff1a;指数字符号在一个数中所处的位置 基数&#xff1a;指在某种进位计数制中&#xff0c;数位上所能使用的数字符号的个数 位权&#xff1a;指在某种进…

29. ExtJs - Struts2 整合(1) - 登录页面

转自&#xff1a;https://yarafa.iteye.com/blog/729197 初学 ExtJS&#xff0c;在此记录下学习过程中的点点滴滴&#xff0c;以备不时只需&#xff0c;也希望能给跟我一样的菜鸟一些帮助&#xff0c;老鸟请忽略。如有不当之处&#xff0c;欢迎指正。 开发环境&#xff1a; MyE…

git php框架,如何用Git安装TP框架

本篇文章主要给大家介绍如何用Git安装Thinkphp框架。关于TP框架的安装&#xff0c;想必大家都知道较为常见的方式是通过composer安装tp框架。首先简单的给大家介绍下Git和TP框架。Git是一个开源的分布式版本控制系统&#xff0c;可以快速&#xff0c;高效地处理从小型到大型项目…

C#EF中,使用类似于SQL中的% 模糊查询

最近在做项目的时候需要使用到模糊查询,但是后台使用EF写的 而不是ADO或者是Dapper,如果是这样的话,我们就可以使用Sql语句直接进行模糊查询 现在我们需要在LINQ中使用类似于模糊查询 在EF中有两个方法:StartsWith()和EndWith() StartsWith(): 在转到定义时 我们可以看见,这个方…

php snoopy视频教程,php的Snoopy类

用了两天这个类&#xff0c;发现很好用。获取请求网页里面的所有链接&#xff0c;直接使用fetchlinks就可以&#xff0c;获取所有文本信息使用fetchtext(其内部还是使用正则表达式在进行处理)&#xff0c;还有其它较多的功能&#xff0c;如模拟提交表单等。使用方法&#xff1a…

城轨列控系统

关于列控系统想问的问题 1&#xff09;列控系统的组成&#xff1f; 2&#xff09;城轨列控系统和列控系统有哪些区别&#xff1f; 3&#xff09;列控系统的设备图片&#xff1f; 4&#xff09;列控系统的作用&#xff1f; 1、地铁的供电部分&#xff1a; 参考&#xff1a;http:…

4、Orcal数据库dmp文件导入

1、CMD命令导入备份数据库dmp文件&#xff1a; 以上一篇博客提到的gdnh用户&#xff0c;我们需要在cmd窗口执行如下命令&#xff1a; imp gdnh/admin123orcl fileE:/createTable.dmp fully 截图说明&#xff1a; 导入成功的标志&#xff1a; 导入完成之后刷新表&#xff1a; 转…

iOS APP 安全测试

1、ipa包加壳 首先&#xff0c;我们可以通过iTunes 下载 AppStore的ipa文件(苹果 把开发者上传的ipa包 进行了加壳再放到AppStore中)&#xff0c;所以我们从AppStore下载的ipa都是加壳的&#xff0c;所以不能直接用来反编译。 得到ipa文件 可以分析APP 里包含的一些资源&#x…

oracle 与 client端执行结果不一致_Oracle -PLSQLDeveloper 13 数据库连接

关于oracle 及PLSQLDeveloper 13如何下载&#xff0c;安装流程不一一赘述&#xff0c;网络帖子很多&#xff0c;知乎直接搜索亦可。本次主要分享&#xff1a;学习前辈们关于安装流程中出现设置报错&#xff0c;应如何处理&#xff08;本人个例&#xff0c;通过网络找思路&#…

Redis——学习之路一(初识redis)

在接下来的一段时间里面我要将自己学习的redis整理一遍&#xff0c;下面是我整理的一些资料&#xff1a; Redis是一款依据BSD开源协议发行的高性能Key-Value存储系统&#xff08;cache and store&#xff09;&#xff0c;所以redis是可以查看源代码https://github.com/MSOpenTe…