OpenGL官方在线帮助文档(英文)
https://www.khronos.org/registry/OpenGL-Refpages/es2.0/
首先说明下OpenGL的常用库:glut是实用工具库,gl是核心库,glu是对gl的部分封装
1.
void glutPostRedisplay(void);
glutPostRedisplay标记当前窗口需要重新绘制。通过glutMainLoop下一次循环时,窗口显示将被回调以重新显示窗口的正常面板。多次调用glutPostRedisplay,在下一个显示回调只产生单一的重新显示回调。
2.
void glutSwapBuffers(void);
交换两个缓冲区指针
3.
void glFlush( void );
glFlush是OpenGL中的函数,用于强制刷新缓冲,保证绘图命令将被执行,而不是存储在缓冲区[2] 中等待其他的OpenGL命令。
4.显示
glutDisplayFunc(draw);
glutIdleFunc(draw);
glutDisplayFunc
设置需要显示的画面函数
glutIdleFunc
刷新显示
5.定时
glutPostRedisplay
定时器函数,控制帧率,防止刷新过快
glutTimerFunc
固定时间更新
glutTimerFunc(16, OnTimer, 1);//固定每16ms更新画面一次(FPS大约60)
void OnTimer(int value)
{
//更新,例如如下操作
if (rotate1) {
angle1 += 0.03;
rtsUpdateObjectShape(object);
}
if (rotate2) {
angle2 += 0.03;
rtsUpdateObjectShape(object2);
}
if (angle1 >= 360.0) {
angle1 = 0.0;
}
if (angle2 >= 360.0) {
angle2 = 0.0;
}
//
glutPostRedisplay();
glutTimerFunc(16, OnTimer, 1);
}
6.glut绘制
//以下所有函数中,radius表示球体的半径,slices表示球体纵向分割的数目(经线),主要是设置绘制的细密度,stacks表示球体横向分割的数目(纬线),创建了绘制中心在模型坐标原点,半径为radius的球体
void glutWireSphere(GLdouble radius, GLint slices, GLint stacks); //网状球
void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); //实心球
void glutWireCube(GLdouble size); //网状立方体
void glutSolidCube(GLdouble size); //实心立方体
void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings); //网状圆环
void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings); //实心圆环
void glutWireCone(GLdouble radius, GLdouble height, GLint slices, GLint stacks); //网状圆锥体
void glutSolidCone(GLdouble radius, GLdouble height, GLint slices, GLint stacks); //实心圆锥体
void glutWireTeapot(GLdouble size); //网状茶壶
void glutSolidTeapot(GLdouble size); //实心茶壶