原文链接:http://blog.youkuaiyun.com/cordova/article/details/52485909
以及:http://ogldev.atspace.co.uk/www/tutorial01/tutorial01.html
OpenGl Tutorial 1
创建一个窗口
因为不同的窗口操作系统具有不同的创建窗口的API,为了屏蔽这种差异性,所有的东西都被GLUT封装了一遍,现在俺们就可以直接用GLUT写一窗口,而在不同的系统上用了。他是怎么做到的呢?
void createContex()
{
# ifdef WIN32
wglCreateContex()
# else ifdef LINUX
//linux 平台调用
# else ifdef MAC
//苹果平台调用
# endif
}
当然实际情况更复杂,不过暂时可以这么理解下下。
主要API
glutInit(&argc,argv);
这两个参数就是main函数传入的两个参数。可以通过使用传入-gldebug来显示GL的错误,或者用-sync禁掉窗口的异步特性。
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
设置窗口的显示模式。常用的模式如下:
glutInitWindowSize(GLint width,GLint height);
初始化窗口的大小
glutInitWindowPosition(GLint x,GLint y);
初始化窗口左上角的起始坐标
glutCreateWindow("you_window_name");
设置窗口的名字
glutDisplayFunc(displayFunc);
这个函数用于设置渲染回调,一般来说在刚创建窗口之后会执行一次渲染回调用于渲染一帧图像。若是改变窗口的位置和大小将会导致这个函数被调用一次
glClearColor(0.0f,0.0f,0.0f,0.0f);
OpenGL本身是一个虚拟状态机,此函数用于设置我们清空backbuffer所用的颜色值。一旦此颜色被设置而不被更改的话,每次清空backbuffer的操作都会使用这里设定的颜色值。颜色值的格式是rgba,每一个元素的取值范围是[0,1]。
glutMainLoop();
开始glut的主循环,这个循环会监测各种消息(比如按键消息)。当窗口接受到消息时,glut调用不同的处理函数来改变渲染状态进而以重绘来改变屏幕上渲染的结果。
glutClear(GL_COLOR_BUFFER_BIT);
用之前设置的颜色来设置backbuffer的颜色
glutSwapBuffer();
交换前后缓存的指针