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

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函数, 小伙伴们都清楚了么。





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

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