-
OpenGL
中常用的
GLUT
函数库
GLUT
函数说明
一、初始化
void
glutInit(
int
*
argc,
char
** argv)
这个函数用来初始化
GLUT
p>
库。对应
main
函数的形式应是:
int
main(int argc,char*
argv[]);
这个函数从
main
函数获取其两个参数。
1
void
glutInitWindowSize(
int
width,
int
height);
2
void
glutInitWind
owPosition(
int
x,
int
y);
设置
glut
程序要产生的窗口的大小和位置(左
上角)。以像素为单位。
void
glutInitDisplayMode(unsigned
int
mode);
设置图形显示模式。参数
mode
的可选值为:
?
GLUT_RGBA
:
当未指明
GLUT-
RGBA
或
GLUT-INDEX
时,
是默认
使用的模式。表明欲建立
RGBA
模式的窗口。
GLUT_RGB
:
与
GLUT-
RGBA
作用相同。
GLUT_INDEX
:
指明为颜色索引模式。
GLUT_SINGLE
:
只使用单缓存
GLUT_DOUBLE
:
使用双缓存。以避免把计算机作图的过程都表现出来,
或者为了
平滑地实现动画。
GLUT_ACCUM
:
让窗口使用累加的缓存。
GLUT_ALPHA
:
让颜色缓冲区使用
alpha
p>
组件。
GLUT_DEPTH
:
使用深度缓存。
GLUT_STENCIL
:
使用模板缓存。
< br>GLUT_MULTISAMPLE
:让窗口支持多例程。
GLUT_STEREO
:
使窗口支持立体。
?
?
?
?
?
?
?
?
?
?
?
GLUT_LUMINACE:
luminance
是亮度的意思。但是很遗憾,在多数
Ope
nGL
平台上,不被支持。
二、事件处理(
Event
Processing
)
void
glutMainLoop(void)
让
glut
程序进入事件循环。在一个
glut
程序中最多只能调用一次。一旦调用,会直到程
序结束
才返回。
三、窗口管理(
Window
Management
)
int
glutCreateWindow(
char
*
name);
产生一个顶层的窗口。
name
作为窗口的名字,也就是窗口标题栏显示的内容。
返回值是生成窗口的标记符,可用函数
glutGetWindow()<
/p>
加以引用。
int
glutCreateSubWindow(
int
win,
int
x,
int
y,
int
width,
int
height);
创建一个子窗口。
win
是其父窗口的标记符。
x,y
是相对父窗口的位
移,以像素表示。
width,height
是子窗口的宽和高。
void
glutSetWindow(
int
win);
int
glutGetWindow(
void
);
功能分别是:设置标记符为
win
的窗口为当前窗口;返回当前窗口的标记符。
void
glutDestroyWindow(
int
win);
销毁以
win
标记的窗口。
void
glutPostRedisplay(
void
);
将当前窗口打上标记,标记其需要再次显示。
void
glutSwapBuffers(
void
);
当窗口模式为双缓存时,
此函数的
功能就是把后台缓存的内容交换到前台显示。
当然,
只有
单缓存时,使用它的功能跟用
glFlush()
一样。
而使用双缓存是为了把完整图画一次性显示在窗口
上,或者是为了实现动画。
void
glutPositionWindow(
int
x,
int
y);
改变当前窗口的位置:当前窗口是顶层窗口时,
x,y
是相对于屏幕的的位移;当前窗口若是
子窗口时,
x,y<
/p>
是相对其父窗口原点的位移。
void
glutReshapeWindow(
int
width,
int
height);
改变当前窗口的大小。
width,height
是当前窗口新的宽度和高度值,当然只能是正
值。
void
glutFullscreen(
void
);
让当前窗口全屏显示。当前窗口是顶层窗口时才有效。
void
glutPopWindow(
void
);
void
glutPushWindow(
void
);
对顶层窗口和子窗口均有效。改变当前窗口在栈中相对于其
它窗口的次序。
void
glut
ShowWindow(
void
);
void
glutHideWindow(
void
);
void
glu
tIconifyWindow(
void
);
这三个函数作用是改变当前窗口的显示状态。
glutShowWindow
让当前窗口可视(这时它还是可能被其它窗口挡
住)。
glutHideWindow
让当前窗口成为不可视状态。
glutIconifyWi
ndow
让当前窗口成为一个图标,也即是最小化。
void glutSetWindowTitle(char* name);
void glutSetIconTitle(char* name);
设置当前窗口(必须是顶层窗口)的标题和图标化时的标题。
void
glutSetCursor(
int
cursor);
设置当前窗口的光标样式。
p>
cursor
可选值有许多:如
GLUT_
CURSOR_RIGHT_ARROW
指向右边的光标,
GL
UT_CURSOR_LEFT_ARROW
指向左边的光标,
GLUT_CURSOR_INFO
成为手状。
GLUT_CURSOR_DESTROY
呈叉状,
GLUT_CURSOR_HELP
呈现问号的形状。等等。
四、窗口的覆盖管理
void
glutEstablishOverlay(
void
);
对当前窗口创建覆盖图层。该覆盖图的模式由初始化显示模
式函数
glutDisplayMode()
决
定。
glutLayerGet(GLUT_OVERLAY_POSSIBLE);
//
可用以设置对于当前窗口,
是否允许产生由初始化
显示模式函数规定其模式的覆盖图层。
void
glutUserLayer(GLenum
layer);
枚举量
laye
r
可选值为:
GLUT_NORMAL,GLUT_OVERL
AY.
分别选取正常位平面或覆盖
平面。
void
glutRemoveLayer(
void
);
除去覆盖图。当没有覆盖图层时,调用这条语句也是安全的
,这时系统不做任何事。
void
glutPostOverlayRedisplay(
void
);
标记该覆盖图层为需要重新显示的状态。
void
glutShowOverlay(
void
);
void
glutHideOverlay(
void
);
显示当前窗口的覆盖图层;隐藏覆盖图层。这两条语句即时
执行。
注意一下,只有窗口可视
时,
使
用
glutShowOverlay
才能使其覆盖图层可视。<
/p>
当窗口被其他窗口遮挡时,
其覆盖图
层也
被遮挡从而不可视。
五、菜单管理
int
glutCreateMenu(
void
(*func)(
int
value))
当点击菜单时
,
< br>调用回调函数
func
,
val
ue
为传递给回调函数的数值
,
它由所
选择的菜单条
目对应的整数值所决定。
这个函数创建一个新的弹出式菜单
,
并返回一个唯一的标识次
菜单的整型标识符
,
并将新建
的弹出菜
单与
func
函数关联在一起
,
这样
,
当选择此菜单中的一个菜单条目时
p>
,
调用回调函数
func.
void
glutSetMenu(
int
menu);
int
glutGetMenu(
void
);
设置当前菜单
;
< br>获取当前菜单的标识符
void
glutDestroyMenu(
int
menu);
删除指定的菜单
void
glutAddMenuEntry(
char
* name,
int
value);
添加一个菜单条目
void
glutAddSubMenu(
char
* name,
int
menu);
在当前菜单的底部增加一个子菜单的触发条目
void
glutChangeToMenuEntry(
int
entry,
char
* name,
int
value);
更改当前菜单中指定菜单项
void
glutChangeToSubMenu(
int
entry,
char
* name,
int
menu);
将指定的当前菜单中菜单项变为子菜单触发条目
void
glutRemoveMenuItem(
int
entry);
删除指定的菜单项
void
glutAttachMenu(
int
button);
void
glutDetachMenu(
int
button);
把当前窗口的一个鼠标按键与当前菜单关联起来
;
解除鼠标按键与弹出式菜单的关联关系。
六、注册回调
void
glutDisplayFunc(
void
(*func)(
void
) );
为当前窗口设置显示回调函数
void
glutOverlayDisplayFunc(
void
(*func)(
void
) );
注册当前窗口的重叠层的显示回调函数
void
glutReshapeFunc(
void
(*Func)(
int
width,
int
height) );
指定当窗口的大小改变时调用的函数
void
glutKeyboardFunc(
void
(*func) (unsigned
char
key,
int
x,
int
y) );
注册当前窗口的键盘回调函数
void
glutMouseFunc(
void
(*func)
(
int
button,
int
state,
int
x,
int
y));
注册当前窗口的鼠标回调函数
fun
c
为注册的鼠标回调函数
,
这个函数完
成鼠标事件的处理
button
为鼠
标的按键
,
为以下定义的常量:
GLUT_LEFT_BUTTON
鼠标左键
GLUT_MIDDLE_BUTTON
鼠标中键
GLUT_RIGHT_BUTTON
鼠标右键
state
为鼠标按键的动作
,
为以下定义的常量:
GLUT_UP
鼠标释放
GLUT_DOWN
鼠标按下
<
/p>
x,y
为鼠标按下式
,
< br>光标相对于窗口左上角的位置
void
glutMotionFu
nc(
void
(*func)(
int
x,
int
y));
void
< br>glutPassiveMotionFunc(
void
(*func)(
int
x,
int
y));
设置移动回调函数
;
设置当前鼠标移动函数
Func
为注册的鼠标移动函数
p>
x,y
为鼠标按下式
,
光标相对于窗口左上角的位置
当鼠标在窗口中按下并移动
时调用
glutMotionFunc
注册的回调函数
当鼠标在窗口中移动时调用
glutPass
iveMotionFunc
注册的回调函数
void
glutVisibilityFunc(
void
(*func) (
int
state) );
设置当前窗口的可视回调函数
Func
为指定的可视回调函数
p>
state
表示窗口的可视性
,
为以下常量
:
-
-
-
-
-
-
-
-
-
上一篇:嵌入式软件工程师面试题
下一篇:封装的理解