帧缓存操作,查询函数,窗口初始化和启动事件处理,窗口管理,菜单管理,
注册回调函数,几何图形绘制
1.7 帧缓存操作
1. glClearColor:设置颜色缓存的清除值
C语言描述
void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
参数
red,green,blue,alpha 指定清除颜色缓存时所使用的红、绿、蓝和alpha值。
说明
指定由glClear清除颜色缓存时所使用的红、绿、蓝和alpha值,指定值的范围固定为[0.0f,1.0f]。
2. glClear:将缓存清除为预先的设置值
C语言描述
void glClear(GLbitfield mask);
参数
mask 对指定的需要清除的缓存进行按位或屏蔽操作,这四个屏蔽值如下:GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT,GL_ACCUM_BUFFER_BIT和GL_STENCIL_BUFFER_BIT。
说明
本函数只有一个变量,这个变量对所清除的缓存值进行按位或操作,这些值如下:
GL_COLOR_BUFFER_BIT 指定当前被激活为写操作的颜色缓存。
GL_DEPTH_BUFFER_BIT 指定深度缓存。
GL_ACCUM_BUFFER_BIT 指定累加缓存。
GL_STENCIL_BUFFER_BIT 指定模板缓存。
3. glClearDepth:设置深度缓存的清除值
C语言描述
void glClearDepth(GLclampd depth);
参数
depth 指定清除深度缓存时使用的深度值。
说明
本函数指定用glClear清除深度缓存时所使用的深度值,该值的范围在[0,1]之间。
1.8 查询函数
1. glGet:返回所选择的参数值
C语言描述
void glGetBooleanv(GLenum pname, GLboolean *params);
void glGetDoublev(GLenum pname, GLdouble *params);
void glGetFloatv(GLenum pname, GLfloat *params);
void glGetIntegerv(GLenum pname, GLint *params);
参数
pname 指定返回的参数值,可以选择的符号常数看下面的说明。
params 返回指定的参数值。
说明
本函数为OpenGL中简单状态变量返回数值,如果params的数据类型并不是状态变量要求的数据类型,则执行类型转换。
下面是pname可以选择的部分符号常数:
GL_COLOR_CLEAR_VALUE params返回四个值:用来清除颜色缓存的红色、绿色、蓝色和alpha值。如果需要,整数值由内部的浮点表达式进行线型映射,1.0返回最大的正整数,-1.0返回最小的正整数值。
GL_COLOR_MATERIAL params返回一个布尔数值,该值表示是否有一个或多个材质参数正在跟踪当前颜色。
GL_COLOR_MATERIAL_FACE params返回一个数值,该值为符号常数,表示有哪些材质正在跟踪当前颜色的参数。
GL_COLOR_MATERIAL_PARAMETER params返回一个数值,该值为符号常数,表示哪些材质参数正在跟踪当前颜色。
GL_CULL_FACE params返回一个布尔数值,该值表示是否能使多边形切割。
GL_CULL_FACE_MODE params返回一个数值,该值为符号常数,它表示哪些多边形的面被剔除。
GL_CURRENT_COLOR params返回四个数值:当前颜色的红、绿、蓝和alpha值。
GL_CURRENT_NORMAL params返回三个数值:当前法向量的x,y和z值。
GL_DOUBLEBUFFER params返回一个布尔值,该值表示是否能支持双缓存。
GL_EDGE_FLAG params返回一个布尔值,该值表示当前的边界标记是TRUE还是FALSE。
GL_FRONT_FACE params返回一个数值,该值为符号常数,表示是顺时针多边形还是逆时针多边形为正面多边形。
GL_LIGHT_MODEL_AMBIENT params返回四个数值:整个场景中环境浓度的红、绿、蓝和alpha值。
GL_LIGHT_MODEL_TWO_SIDE params返回一个布尔值,该值表示是否使用分离的材质计算正面多边形和反面多边形的光照。
GL_LINE_STIPPLE_PATTERN params返回一个数值,该值为16位直线点划图。
GL_LINE_STIPPLE_REPEAT params返回一个数值,该值为直线点划图的重复因子。
GL_LINE_WIDTH params返回一个数值,该值为当前指定的线宽。
GL_LINE_WIDTH_RANGE params返回两个数值,线段所支持的最小宽度和最大宽度。
GL_MAX_CLIP_PLANES params返回一个数值,该值为应用程序定义的切割平面的最大数目。
GL_MAX_LIGHTS params返回一个数值,该值为光照的最大数目。
GL_MAX_MODELVIEW_STACK_DEPTH params返回一个数值,该值为模型视图矩阵堆栈支持的最大深度。
GL_MAX_PROJECTION_STACK_DEPTH params返回一个数值,该值为投影矩阵堆栈支持的最大深度。
GL_MODELVIEW_MATRIX params返回16个数值:在模型视图矩阵堆栈顶层的模型视图矩阵。
GL_MODELVIEW_STACK_DEPTH params返回一个数值,该值为模型视图矩阵堆栈的矩阵数目。
GL_POINT_SIZE params返回一个数值,该值为当前指定的点的大小。
GL_POINT_SIZE_RANGE params返回两个数值:点大小的最小值和最大值。
GL_POLYGON_MODE params返回两个数值:指定是正面多边形还是反面多边形被光栅化为点、线或实多边形的符号常数。
GL_PROJECTION_MATRIX params返回16个数值:在投影矩阵堆栈顶层的模型视图矩阵。
GL_ PROJECTION_STACK_DEPTH params返回一个数值,该值投影矩阵堆栈的矩阵数目。
GL_SHADE_MODEL params返回一个数值,该值为符号常数,表示阴影模式是平面明暗模式还是光滑明暗模式。
GL_VIEWPORT params返回四个数值:视口的x和y窗口坐标,接下来是视口的宽度和高度。
2.glGetClipPlane:返回指定的切平面系数
C语言描述
void glGetClipPlane(GLenum plane, GLdouble *equation);
参数
plane 指定用GL_CLIP_PLANEi标示的切割平面。
*equation 返回视点坐标中plane平面方程的系数。
说明
本函数可以获得切割平面方程的四个系数。
3. glGetLight:返回光源参数值
C语言描述
void glGetLightfv(GLenum light, GLenum pname, GLfloat *params);
void glGetLightiv(GLenum light, GLenum pname, GLint *params);
参数
light 指定名为GL_LIGHTi(0≤i≤GL_MAX_LIGHTS)。
pname 指定光源参数。
*param 返回请求的数据。
说明
本函数用于获取光源的参数,pname指定的光源参数如下:
GL_AMBIENT params返回四个整数值或浮点数值,这些值表示光源的环境RGBA浓度。
GL_DIFFUSE params返回四个整数值或浮点数值,这些值表示光源的漫反射RGBA浓度。
GL_SPECULAR params返回四个整数值或浮点数值,这些值表示光源的镜面RGBA浓度。
GL_POSITION params返回四个整数值或浮点数值,这些值表示光源的位置。
GL_SPOT_DIRECTION params返回三个整数值或浮点数值,这些值表示光源的方向。
GL_SPOT_EXPONENT params返回一个整数值或浮点数值,它表示聚光源指数。
GL_SPOT_CUTOFF params返回单个整数值或浮点数值,它表示聚光源的角度。
GL_CONSTANT_ATTENUATION params返回单个整数值或浮点数值,它表示光照的恒定衰减值(与距离无关)。
GL_LINEAR_ATTENUATION params返回单个整数值或浮点数值,它表示光照的线性衰减值。
GL_QUADRATIC_ATTENUATION params返回单个整数值或浮点数值,它表示光照的二次衰减值。
4. glGetMaterial:返回材质参数
C语言描述
void glGetMaterialfv(GLenum face, GLenum panem, GLfloat *params);
void glGetMaterialiv(GLenum face, GLenum panem, GLint *params);
参数
face 指定查询的是哪个面的材质,必须为GL_FRONT、GL_BACK或GL_FRONT_AND_BACK。
pname 指定返回的材质参数。
*params 返回请求的数据。
说明
本函数用于获取材质参数。pname可以选择的参数值如下:
GL_AMBIENT params返回四个整数值或浮点数值,这些值表示材质环境反射的RGBA值。
GL_DIFFUSE params返回四个整数值或浮点数值,这些值表示材质漫反射的RGBA值。
GL_SPECULAR params返回四个整数值或浮点数值,这些值表示材质镜面反射的RGBA值。
GL_EMISSION params返回四个整数值或浮点数值,这些值表示材质漫反射光浓度的RGBA值。
GL_SHININESS params返回单个整数值或浮点数值,这个值表示材质的RGBA镜面指数。
GL_COLOR_INDEXES params返回三个整数值或浮点数值,这些值表示材质的环境反射、漫射反射和镜面反射的颜色索引值。
1.9 窗口初始化和启动事件处理
1. glutInit:初始化GLUT库
C语言描述
void glutInit(int *argcp, char **argv);
参数
*argcp 指向main函数argc变量的指针。由于glutInit用于初始化GLUT库的命令行选项,因此当函数返回时,argcp指向的数值会被更新。
*argv main函数的argv变量。
说明
本函数用来初始化GLUT库并同窗口系统对话协商。在此过程中,如果GLUT不能正确初始化,glutInit函数将会终止GLUT程序,并将错误信息回送给用户。
2. glutInitWindowPosition:设置初始窗口的位置
C语言描述
void glutInitWindowPosition(int x, int y);
参数
x 窗口左上角的x坐标,以像素为单位。
y 窗口左上角的y坐标,以像素为单位。
说明
本函数用当前初始的窗口位置和初始的窗口大小创建新窗口。对应初始窗口位置的GLUT状态值开始时为-1和-1。创建窗口时,如果初始窗口位置的任意一个分量为零,那么窗口的实际位置就由窗口系统来决定。注意,初始窗口位置的目的是向窗口系统建议窗口的初始位置,窗口系统未必使用该信息。
3. glutInitWindowSize:设置初始窗口的大小
C语言描述
void glutInitWindowSize(int width, int height);
参数
width 初始窗口的宽度,以像素为单位。
height 初始窗口的高度,以像素为单位。
说明
本函数用当前初始的窗口大小和初始的窗口位置创建新窗口。对应初始窗口大小的GLUT状态值开始时为300和300。初始窗口大小的分量值必须大于0。注意,初始窗口大小的目的是向窗口系统建议窗口的初始大小,窗口系统未必使用该信息。
4. glutInitDisplayMode:设置初始显示模式
C语言描述
void glutInitDisplayMode(unsigned int mode);
参数
mode 指定初始窗口的显示模式,通常是若干指明窗口帧缓存特性的标识的组合。GLUT定义了如下标识:
GLUT_RGBA或GLUT_RGB 指定RGBA颜色模式的窗口。
GLUT_INDEX 指定颜色索引模式的窗口。
GLUT_SINGLE 指定单缓存窗口。
GLUT_DOUBLE 指定双缓存窗口。
GLUT_ACCUM 窗口使用累加缓存。
GLUT_ALPHA 窗口的颜色分量包含alpha值。
GLUT_DEPTH 窗口使用深度缓存。
GLUT_STENCIL 窗口使用模板缓存。
GLUT_MULTISAMPLE 指定支持多样本功能的窗口,如果系统不支持多样本功能,则自动选择非多样本窗口。
GLUT_STEREO 指定立体窗口。
GLUT_LUMINANCE 窗口使用亮度颜色模型。亮度颜色模型提供了OpenGL RGBA颜色模型的功能,但是帧缓存中没有绿色和蓝色分量,而且每个像素的红色分量转换为0到glutGet(GLUT_WINDOW_COLORMAP_SIZE)-1之间的索引值。然后再在颜色索引表中查找来确定该像素的颜色。注意,大多数OpenGL平台都不支持这种模型。
说明
当创建窗口时,本函数用于确定所创建窗口的显示模式。注意,当使用GLUT_RGBA选择RGBA颜色模式时,alpha缓存并没有创建,因此,如果需要用到alpha,应同时指定GLUT_ALPHA。
5. glutMainLoop:进入GLUT事件处理循环
C语言描述
void glutMainLoop(void);
说明
调用本函数进入GLUT事件处理循环。glutMainLoop函数在GLUT程序中最多只能调用一次,它一旦调用就不再返回,并且调用注册过的回调函数。
1.10 窗口管理
1. glFlush:刷新OpenGL命令队列和缓冲区
C语言描述
void glFlush(void);
说明
刷新OpenGL命令队列和缓冲区。OpenGL命令常常会排队并成批处理以便优化性能。glFlush命令使得所有正在等待的命令得到执行。
2. glutCreateWindow:创建顶层窗口
C语言描述
void glutCreateWindow(char *name);
参数
name 用来作为窗口标题的ASCII码字符串。
说明
本函数用于创建窗口时,以name作为窗口的名字,同时新建窗口被置为当前窗口。每个窗口都有一个与之关联的唯一的OpenGL上下文,窗口创建后,能够立即对OpenGL上下文中的状态进行变动。
窗口的显示状态开始是可视的,但在调用glutMainLoop函数后,窗口才显示在屏幕上,这意味着,直到调用glutMainLoop函数前,所有的绘图命令都无效,因为窗口还没有绘制出来。
3. glutCreateSubWindow:创建子窗口
C语言描述
void glutCreateSubWindow(int win, int x, int y, int width, int height);
参数
win 子窗口的父窗口的标识符。
x,y 子窗口相对于父窗口原点的x和y坐标(以像素为单位)。
width,height 子窗口的宽度和高度(以像素为单位)。
说明
本函数在当前窗口win中创建一个宽为width,高为height的位于(x,y)处的子窗口,同时新建的子窗口被设置成当前窗口。子窗口可以任意嵌套。
4. glutHideWindow:隐藏当前窗口的显示状态
C语言描述
void glutHideWindow(void);
说明
本函数改变当前窗口的显示状态,使其隐藏,但是该函数的调用结果直到返回主事件循环才生效。
5. glutShowWindow:改变当前窗口的显示状态,使其显示
C语言描述
void glutShowWindow(void);
说明
本函数改变当前窗口的显示状态,使其显示,但是该函数的调用结果直到返回主事件循环才生效。
6. glutSetWindowTitle:设置当前顶层窗口的窗口标题
C语言描述
void glutSetWindowTitle(char *name);
参数
name 由glutCreateWindow函数中的name变量确定的顶层窗口名称。
说明
本函数应该在当前窗口为顶层窗口时调用。当创建顶层窗口时,顶层窗口的窗口标题由glutCreateWindow函数中的name变量确定,但窗口一旦建立后,窗口标题就可以由本函数来修改。
7. glutPostRedisplay:标记当前窗口需要重新绘制
C语言描述
void glutPostRedisplay(void);
说明
本函数标记当前窗口的图像层需要重新绘制,在glutMainLoop函数的事件处理循环的下一个反复中,将调用该窗口的显示回调函数重绘该窗口的图像层。
8. glutSwapBuffers:交换当前窗口的缓存
C语言描述
void glutSwapBuffers(void);
说明
本函数交换当前窗口的使用层的缓存,它将后台缓存中的内容交换到前台缓存中,该函数执行的结果直到显示器垂直回扫后才看得到。如果使用层不是双缓存结构,本函数将不起任何作用。
9. glutFullScreen:使窗口全屏显示
C语言描述
void glutFullScreen(void);
说明
本函数申请把当前窗口用全屏显示。本函数的申请不会立即被处理,只有返回到主事件循环之后它才被执行。
10. glutPositionWindow:申请改变当前窗口的位置
C语言描述
void glutPositionWindow(int x, int y);
参数
x 新的窗口位置坐标的x分量,以像素为单位。
y 新的窗口位置坐标的y分量,以像素为单位。
说明
本函数申请改变当前窗口的位置,对于顶层窗口,x和y参数是相对于屏幕原点的像素偏移值,对于子窗口,x和y参数是相对于父窗口原点的像素偏移值。本函数的申请并不会立即被处理,只有返回到主事件循环之后它才被执行。
11. glutReshapeWindow:申请改变当前窗口的大小
C语言描述
void glutReshapeWindow(int width, int height);
参数
width 新窗口的宽度,以像素为单位。
height 新窗口的高度,以像素为单位。
说明
本函数申请改变当前窗口的大小,width和height变量指定窗口的新尺寸,它们必须为正值。本函数的申请并不会立即被处理,只有返回到主事件循环之后它才被执行。
12. glutSetWindow:设置当前窗口
C语言描述
void glutSetWindow(int win);
参数
win 被设置成当前窗口的窗口标识符。
说明
本函数设置当前窗口,但不改变窗口的使用层。
13.glutGetWindow:获得当前窗口的标识符
C语言描述
int glutGetWindow(void);
说明
本函数返回当前窗口的标识符,如果窗口不存在,或者删除了前一个当前窗口,则本函数返回0。
14. glutPopWindow:改变当前窗口的位置,使其前移
C语言描述
void glutPopWindow(void);
说明
本函数对顶层窗口和子窗口都起作用,但是,弹出窗口的结果并不会立即产生,相反,弹出操作会一直保存,直到进入事件循环,该操作才会执行。
15. glutPushWindow:改变当前窗口的位置,使其后移
C语言描述
void glutPushWindow(void);
说明
本函数对顶层窗口和子窗口都起作用,但是,压入窗口的结果并不会立即产生,相反,压入操作会一直保存,直到进入事件循环,该操作才会执行。
16. glutDestroyWindow:销毁指定的窗口
C语言描述
void glutDestroyWindow(int win);
参数
win 指定要销毁的GLUT窗口的窗口标识符。
说明
本函数销毁由win指定的窗口以及与窗口关联的OpenGL上下文、逻辑颜色表(若窗口是颜色索引模式)和重叠层(如果存在),该窗口的任何子窗口也被一同销毁,如果win为当前窗口,则当前窗口在此函数调用后变成空值。
1.11 菜单管理
1. glutCreateMenu:创建一个新的弹出式菜单
C语言描述
int glutCreateMenu(void (*func)(int value));
参数
func 当选择菜单上的一个菜单条目时,func定义被调用的回调函数。
value 传递给回调函数的数值,它由所选择的菜单条目对应的整型值决定。
说明
本函数创建一个新的弹出式菜单并返回一个唯一标识此菜单的整型标识符,并将新建的弹出菜单与func函数关联在一起,这样,当选择此菜单中的一个菜单条目时,调用回调函数func,传递给他的参数value指定选取的菜单条目。
2. glutAddMenuEntry:在当前菜单的底部增加一个菜单条目
C语言描述
void glutAddMenuEntry(char *name, int value);
参数
name 显示在新菜单条目上的ASCII码字符串。
valur 当选择该菜单条目时,传递到菜单回调函数中的数值。
说明
本函数在当前菜单的底部增加一个菜单条目,字符串name将显示在新增加的菜单条目上。如果用户选择了这个菜单条目,对应的菜单回调函数就被调用,并以value值作为传递给此回调函数的参数。
3.glutAddSubMenu:在当前菜单的底部增加一个子菜单触发条目
C语言描述
void glutAddSubMenu(char *name, int menu);
参数
name 显示在新子菜单触发条目上的ASCII码字符串。
valur 当选择该子菜单触发条目时弹出的子菜单的标识符。
说明
本函数在当前菜单的底部增加一个子菜单触发条目,字符串name将显示在新增加的子菜单触发条目上。如果用户选择了这个菜单项,则menu标识的子菜单就会弹出,使用户可以在子菜单中做进一步的选择。
4. glutAttachMenu:把当前窗口的一个鼠标按键与当前菜单的标识符联系起来
C语言描述
void glutAttachMenu(int botton);
参数
botton 指明何种鼠标按键,它可以选择的符号常数为:GLUT_LEFT_BUTTON、GLUT_MIDDLE_BUTTON或GLUT_RIGHT_BUTTON,分别表示鼠标左键、中键和右键。
说明
本函数把当前窗口的一个鼠标按键与当前菜单的标识符联系起来,通过把菜单标识附到一个鼠标按键上,当用户点取该按键时,菜单标识符标识的菜单将弹出。
5. glutGetMenu:获取当前菜单的标识符
C语言描述
int glutgetMenu(void);
说明
本函数获取当前菜单的标识符,如果没有菜单存在或前一个当前菜单被删除了,本函数返回0值。
6. glutSetMenu:设置当前菜单
C语言描述
void glutSetMenu(int menu);
参数
menu 指明菜单标识符,其标识的菜单将被设置成当前菜单。
说明
本函数将menu标识的菜单设置成当前菜单。
7. glutDestroyMenu:删除指定的菜单
C语言描述
void glutDestroyMenu(int menu);
参数
menu 被删除的菜单的标识符。
说明
本函数删除由menu指定的菜单。如果menu是当前菜单,则当前菜单变为空值,此时调用glutGetMenu返回0值。当一个菜单被删除时,对其能够触发的子菜单没有影响。
8. glutRemoveMenuItem:删除指定的菜单项
C语言描述
void glutRemoveMenuItem(int entry);
参数
entry 当前菜单中要删除的菜单项的索引(最顶层的菜单项的索引值为1)。
说明
本函数删除由entry指定的菜单项,不管它是一个菜单条目还是一个子菜单触发条目。
1.12 注册回调函数
1. glutDisplayFunc:注册当前窗口的显示回调函数
C语言描述
void glutDisplayFunc(void (*func)(void));
参数
func 指明显示回调函数。
说明
本函数注册当前窗口的显示回调函数。当一个窗口的图像层需要重新绘制时,GLUT将调用该窗口的显示回调函数。GLUT根据窗口的重绘状态判定是否调用该窗口的显示回调函数。窗口的重绘状态在如下情况下设置:一是调用了glutPostRedisplay函数;二是用户进行了某些窗口操作(使窗口的大小改变了,使窗口被挡住的部分重新显示出来等)。多个要求窗口重新绘制的请求将被结合在一起,以便使显示回调函数的调用次数减少到最少的程度。
当窗口创建时,该窗口的显示回调函数并不存在,显示回调函数在窗口显示前必须注册,否则窗口的显示将导致致命错误。
2. glutReshapeFunc:注册当前窗口的形状变化回调函数
C语言描述
void glutReshapeFunc(void(*func)(int width, int height));
参数
func 指定形状变化回调函数。
width 新窗口的宽度。
height 新窗口的高度。
说明
本函数注册当前窗口的形状变化回调函数。当改变窗口的大小时,该窗口的形状改变回调函数将被调用。此外,在下列情况下也将调用该窗口的形状改变回调函数:一是当一个窗口创建后,在第一次调用它的显示回调函数之前;二是当创建窗口的重叠层时。回调函数中的width和height参数是窗口的新尺寸(以像素为单位)。在回调前,当前窗口的大小设置为改变后窗口的大小。
如果一个窗口没有注册形状改变回调函数,或者用NULL作为参数调用了glutReshapeFunc(注销前面注册了的形状变化回调函数),那么当窗口的大小变化时,调用缺省的形状改变回调函数。缺省的形状改变回调函数仅包含一条语句:glViewPort(0,0,width,height)。
当顶层窗口的大小改变时,子窗口的大小改变时,也只产生一次形状变化回调,因此,形状变化回调函数有责任同时更新窗口的图像层和重叠层。
3.glutMouseFunc:注册当前窗口的鼠标回调函数
C语言描述
void glutMouseFunc(void(* func)(int button, int state, int x, int y));
参数
func 指定鼠标回调函数。
button 定义鼠标的按键。
state 定义鼠标按键的动作。
x 当按下鼠标时,鼠标相当于窗口左上角的x坐标。
y 当按下鼠标时,鼠标相当于窗口左上角的y坐标。
说明
本函数注册当前窗口的鼠标回调函数。当用户在窗口中按下或释放鼠标键时,每一次的按下动作和每一次的释放动作都产生一次鼠标回调。button变量可以选择下列常值中的一个:GLUT_LEFT_BUTTON,GLUT_MIDDLE_BUTTON,GLUT_RIGHT_BUTTON回调。state变量的值是GLUT_UP和GLUT_DOWN中的一个,GLUT_UP表示回调是由按下动作产生的,GLUT_DOWN表示回调是由释放动作产生的。x和y变量指定鼠标按键的状态变化时鼠标相对于窗口左上角的位置(以像素为单位)。当对一个按键的GLUT_DOWN回调产生时,程序可以假定当释放这个按键时,对同一个按键的GLUT_UP回调也将产生,即使鼠标已经移到了窗口外。
如果有菜单与窗口的一个鼠标按键连到一块,则对这个按键的鼠标回调将不再产生。
4.glutKeyboardFunc:注册当前窗口的键盘回调函数
C语言描述
void glutKeyBoardFunc(void(*func)(unsigned char key, int x, int y));
参数
func 指明键盘回调函数。
key 生成的ASCII字符。
x,y 当按下key键时,鼠标相对于窗口左上角的x,y坐标。
说明
本函数注册当前窗口的键盘回调函数。当用户在窗口中敲击键盘时,每一次产生ASCII字符的按键动作都将产生一次键盘回调。键盘回调函数中,key变量是生成的ASCII字符,x和y变量指定键按下时鼠标相对于窗口左上角的位置(以像素为单位)。
5. glutSpecialFunc:注册当前窗口的特定键回调函数
C语言描述
void glutSpecialFunc(void(*func)(int key, int x, int y));
参数
func 指明特定键回调函数。
key 指定按下的特定键。
x,y 当按下键时,鼠标相对于窗口左上角的x,y坐标。
说明
本函数设置当前窗口的特定键回调函数。当键盘中的功能键和方向键按下时,调用特定键回调函数。变量key是按下的特定键对应的GLUT_KEY_常量。x和y变量指定键按下时鼠标相对于窗口左上角的坐标。
对于变量key,可以选择的常数如下:
GLUT_KEY_F1 F1功能键
GLUT_KEY_F2 F2功能键
GLUT_KEY_F3 F3功能键
GLUT_KEY_F4 F4功能键
GLUT_KEY_F5 F5功能键
GLUT_KEY_F6 F6功能键
GLUT_KEY_F7 F7功能键
GLUT_KEY_F8 F8功能键
GLUT_KEY_F9 F9功能键
GLUT_KEY_F10 F10功能键
GLUT_KEY_F11 F11功能键
GLUT_KEY_F12 F12功能键
GLUT_KEY_LEFT 左方向键
GLUT_KEY_UP 上方向键
GLUT_KEY_RIGHT 右方向键
GLUT_KEY_DOWN 下方向键
GLUT_KEY_PAGE_UP PageUp键
GLUT_KEY_PAGE_DOWN PageDown键
GLUT_KEY_HOME Home键
GLUT_KEY_END End键
GLUT_KEY_INSERT Insert键
6. glutTimerFunc:注册按一定时间间隔触发的定时器回调函数
C语言描述
void glutTimerFunc(unsigned int msecs, void(*func)(int value));
参数
msecs 本次注册的定时器回调函数两次邻近触发之间的时间间隔(以毫秒为单位)。
func 指定定时器回调函数。
value 传送到定时器回调函数中的整型值。
说明
本函数注册按msecs毫秒时间间隔触发的定时器回调函数func。传给定时器回调函数的value参数等于注册此回调函数时传给函数glutTimerFunc的参数value的值。多个按同一时间间隔或不同时间间隔触发的定时器回调函数可以同时注册。
定时器回调函数的触发间隔只是该函数调用前必须等待的最小时间,当定时器回调函数对应的触发时间期满后,GLUT将尽可能快地调用该函数。
1.13 几何图形绘制
1. glutSolidSphere,glutWireSphere:绘制实心球体和线框球体
C语言描述
void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
参数
radius 球体的半径。
slices 球体围绕z轴(相对于经度线)分割的数目。
stacks 球体沿着z轴(相对于纬度线)分割的数目。
说明
绘制中心在模型坐标原点、半径为radius的球体,球体围绕z轴分割为slices个数目,沿着z轴分割stacks个的数目。
2. glutSolidCube,glutWireCube:绘制实心立方体和线框立方体
C语言描述
void glutSolidCube(GKdouble size);
void glutWireCube(GKdouble size);
参数
size 立方体的边长。
说明
这两个函数用于绘制以模型坐标原点为中心、边长为size的实心立方体和线框立方体。
3. glutSolidCone,glutWireCone:绘制实心圆锥体和线框圆锥体
C语言描述
void glutSolidCone(GLdouble radius, GLdouble height, GLint slices, GLint stacks);
void glutWireCone(GLdouble radius, GLdouble height, GLint slices, GLint stacks);
参数
radius 圆锥体基底的半径。
height 圆锥体的高度。
slices 圆锥体围绕z轴的分割数。
stacks 圆锥体数沿着z轴的分割数。
说明
这两个函数分别绘制沿着z轴方向定位的实心圆锥体和线框圆锥体。圆锥体的基底定位于z = 0平面内,顶点z = height,圆锥体围绕z轴分割为slices个数目,沿着z轴分割为stacks个数目。
4. glutSolidTorus,glutWireTorus:绘制实心圆环和线框圆环
C语言描述
void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings);
void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings);
参数
innerRadius 圆环的内半径。
outerRadius 圆环的外半径。
nsides 沿着圆环方向的分割数。
rings 圆环的环线数。
说明
这两个函数分别绘制中心位于模型坐标原点的实心圆环和线框圆环,圆环的轴线沿着z轴方向。
5. glutSolidDodecahedron,glutWireDodecahedron:绘制实心十二面体和线框十二面体
C语言描述
void glutSolidDodecahedron(void);
void glutWireDodecahedron(void);
说明
这两个函数分别绘制中心位于模型坐标原点的实心12面体和线框12面体,12面体的半径为 。
6. glutSolidOctahedron,glutWireOctahedron:绘制实心八面体和线框八面体
C语言描述
void glutSolidOctahedron(void);
void glutWireOctahedron(void);
说明
这两个函数分别绘制中心位于模型坐标原点的实心八面体和线框八面体,八面体的半径为1.0。
7. glutSolidTetrahedron,glutWireTetrahedron:绘制实心四面体和线框四面体
C语言描述
void glutSolidTetrahedron(void);
void glutWireTetrahedron(void);
说明
这两个函数分别绘制中心位于模型坐标原点的实心四面体和线框四面体,四面体的半径为 。
8. glutSolidIcosahedron,glutWireIcosahedron:绘制实心二十面体和线框二十面体
C语言描述
void glutSolidIcosahedron(void);
void glutWireIcosahedron(void);
说明
这两个函数分别绘制中心位于模型坐标原点的实心20面体和线框20面体,20面体的半径为1.0。
9. glutSolidTeapot,glutWireTeapot:绘制实心茶壶和线框茶壶
C语言描述
void glutSolidTeapot(GLdouble size);
void glutWireTeapot(GLdouble size);
参数
size 茶壶的相对尺寸。
说明
这两个函数分别绘制实心茶壶和线框茶壶,茶壶的曲面法向量和纹理坐标也同时生成。茶壶是用OpenGL的求值器构建的。