openGL学习笔记二:看看上一篇我们写的代码

哈哈, 千呼万唤始出来, 我们第二篇笔记新鲜出炉了( 话说不是没隔多久么。。。。)

呵呵, 闲话不多说, 我们来看看上一篇我们写的代码, 知其然也要知其所以然啊

#include <gl/glut.h>

void display()
{
	glClear( GL_COLOR_BUFFER_BIT);
	glRectf( -1, -1, 1, 1);
	glFinish();
}

int main( int argc, char* argv[])
{
	glutInit( &argc, argv);
	glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE);
	glutInitWindowPosition( 0, 0);
	glutInitWindowSize( 1280, 720);
	glutCreateWindow( "这个应该是标题吧");
	glutDisplayFunc( &display);
	glutMainLoop();
	return 0;
}

先从头文件说起吧, 正规的OpenGL在使用的时候会包含

#include <GL/gl.h>
#include <GL/glu.h>

这两个头文件, 但是小伙伴们还记得刚刚我们使用的glut库吗?在glut库里面直接就给我们包含了这两个头文件, 所以我们只需要包含glut.h就好了。

对于一个C语言程序, 我们首先会看他的主函数对吧, 我们现在就依次看看每句代码表示了什么:

glutInit( &argc, argv);

初始化, 一般就是这样写了

glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE);

设置显示的方式, 参数



对应宏定义

意义

GLUT_RGB

0x0000

指定 RGB 颜色模式的窗口

GLUT_RGBA

0x0000

指定 RGBA 颜色模式的窗口

GLUT_INDEX

0x0001

指定颜色索引模式的窗口

GLUT_SINGLE

0x0000

指定单缓存窗口

GLUT_DOUBLE

0x0002

指定双缓存窗口

GLUT_ACCUM

0x0004

窗口使用累加缓存

GLUT_ALPHA

0x0008

窗口的颜色分量包含 alpha 值

GLUT_DEPTH

0x0010

窗口使用深度缓存

GLUT_STENCIL

0x0020

窗口使用模板缓存

GLUT_MULTISAMPLE

0x0080

指定支持多样本功能的窗口

GLUT_STEREO

0x0100

指定立体窗口

GLUT_LUMINANCE

0x0200

窗口使用亮度颜色模型
glutInitWindowPosition( 0, 0);

设置窗口在屏幕的什么位置, 屏幕左上角为坐标原点http://write.blog.csdn.net/postedit

glutInitWindowSize( 1280, 720);

设置窗口大小

glutCreateWindow( "这个应该是标题吧");

根据前面的信息创建一个窗口, 传入的参数是窗口的名称(注意, 现在创建好的窗口不会显示出来, 只有在使用了glutMainLoop()之后才会显示到屏幕上)

glutDisplayFunc( &display);

注册一个绘图函数, 当我们需要绘图时就调用这个函数

glutMainLoop();

进入glut事件处理循环, 让所有与事件有关的函数无限循环

glClear( GL_COLOR_BUFFER_BIT);

清除, 这里是清除颜色

GL_COLOR_BUFFER_BIT:   当前可写的颜色缓冲

GL_DEPTH_BUFFER_BIT:   深度缓冲

GL_ACCUM_BUFFER_BIT:   累积缓冲

GL_STENCIL_BUFFER_BIT: 模板缓冲

glRectf( -1, -1, 1, 1);

绘制一个矩形, 四个参数表示位于对角线上两个点的横纵坐标, 默认坐标在-1到1之间, 当然, 我们后面可以修改他

glFinish();

向图形硬件提交缓冲区里的指令,并等待所有指令执行完成后再返回(说的通俗点就是让openGL的命令立即执行, 不会在缓冲区等待等待)。

小伙伴们看了注释是不是觉得OpenGL也不是想象中的那么难吧, 哦, 对了, 还有一个忘了说了, 以glut开头的都是glut库提供的函数, 以gl开头的都是标准的openGL函数, 小伙伴们都清楚了么。

每天积累一点点, 总有一天你会成为大神的

时间: 2024-08-01 06:31:10

openGL学习笔记二:看看上一篇我们写的代码的相关文章

Caliburn.Micro学习笔记(二)----Actions

Caliburn.Micro学习笔记(二)----Actions 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions,看一下Caliburn.Micro给我们提供了多强大的支持 我们还是从做例子开始 demo的源码下载在文章的最后 例子1.无参数方法调用 点击button把textBox输入的文本弹出来 如果textbox里没有文本button不可点,看一下效果图 看一下前台代码 <Stac

Android学习笔记二十九之SwipeRefreshLayout、RecyclerView和CardView

Android学习笔记二十九之SwipeRefreshLayout.RecyclerView和CardView 前面我们介绍了AlertDialog和几个常用的Dialog,ProgressDialog进度条提示框.DatePickerDialog日期选择对话框和TimePickerDialog时间选择对话框.这一节我们介绍几个新的API控件SwipeRefreshLayout.RecyclerView和CardView,这几个API控件都是google在Android5.0推出的.下面我们来学

angular学习笔记(二十七)-$http(5)-使用$http构建RESTful架构

在angular中有一个特别为RESTful架构而定制的服务,是在$http的基础上进行了封装. 但是为了学习,我们先看看用直接$http是如何构建RESTful架构的: 假设有一个银行卡的列表.需要的功能有: 可以通过id来获取用户123的指定id的卡     'GET'  'card/user/123/id' 可以获取用户123的所有的银行卡             'GET'  'card/user/123' 可以更新用户123的指定id的卡                'POST' '

Linux学习笔记二:Linux的文件处理命令

1.文件处理命令:ls 作用:显示目录文件 语法:ls [选项] [文件或目录] [选项]:-a 显示所有文件,包括隐藏文件   -l 显示详细信息 -d 查看目录属性 [文件或目录]:当省略时默认将当前路径作为参数 实例: · ls 显示当前文件夹下所有文件(不包括隐藏文件)的信息 · ls -l 显示当前文件夹下所有文件(不包括隐藏文件)的详细信息 · ls -ld  显示当前文件夹的详细信息 技巧:要查看文件夹的信息,必须加-d参数:要查看详细参数,必须加-l参数. 2.文件的属性 使用”

《AxureRP原型设计学习笔记》之骨头班门弄斧篇

懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 青岛) ---- 前言 ---- AxureRP中的RP:Rapid Prototyping,快速原型. 这是产品经理的神奇,作为开发来搞这个东西,有点班门弄斧. 最近边查边搞了一个丑陋的app原型,一点心得,简计于此. mac下的AxureRP装完之后,默认打开是不显示程序界面的.别跟骨头似的以为没装好,重新下载安装.新建或打开即可. 这是软件界面: ---- 控件 ---- 不建议初学者首先下

《SQL必知必会》学习笔记二)

<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语句,但是实际应用中的业务逻辑往往会非常复杂,所以会用到一些比较复杂的查询,如子查询,联合查询. 1.子查询 当一个查询是另一个查询的条件时,称为子查询.但是说到子查询又不的不说它与嵌套查询两者的区别,下面一张图来说明 下面再用一条sql语句来说明他们的关系. 其中在查询中又分为嵌套子查询和相关子查询,他们之间

WPF的Binding学习笔记(二)

原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的皮毛, 然后就做别的事去了, 等回头再来看WPF的时候, 哈忘记了~ 于是写个例子补一下, 在继续学习Binding. 1, 首先准备好一个类 public class Hero { public Hero(int id, string name, string skill, bool hasM)

学习笔记:Caffe上LeNet模型理解

学习笔记:Caffe上LeNet模型理解 Caffe中用的模型结构是著名的手写体识别模型LeNet-5(http://yann.lecun.com/exdb/lenet/a35.html).当年美国大多数银行就是用它来识别支票上面的手写数字的.能够达到这种商用的地步,它的准确性可想而知,唯一的区别是把其中的sigmoid激活函数换成了ReLU. 为什么换成ReLU,上一篇blog中找到了一些相关讨论,可以参考. CNN的发展,关键就在于,通过卷积(convolution http://deepl

2. 蛤蟆Python脚本学习笔记二基本命令畅玩

2. 蛤蟆Python脚本学习笔记二基本命令畅玩 本篇名言:"成功源于发现细节,没有细节就没有机遇,留心细节意味着创造机遇.一件司空见惯的小事或许就可能是打开机遇宝库的钥匙!" 下班回家,咱先来看下一些常用的基本命令. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48092873 1.  数字和表达式 看下图1一就能说明很多问题: 加法,整除,浮点除,取模,幂乘方等.是不是很直接也很粗暴. 关于上限,蛤蟆不太清楚