哈哈, 千呼万唤始出来, 我们第二篇笔记新鲜出炉了( 话说不是没隔多久么。。。。)
呵呵, 闲话不多说, 我们来看看上一篇我们写的代码, 知其然也要知其所以然啊
#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函数, 小伙伴们都清楚了么。
每天积累一点点, 总有一天你会成为大神的