(转)glut函数详解(11)--状态查询API

int glutGet(GLenum state);

检索指定的GLUT状态

参数:
state:指定要检索的状态类型,为以下常量:
  GLUT_WINDOW_X:当前窗口的x坐标,以像素为单位.
  GLUT_WINDOW_Y:当前窗口的y坐标,以像素为单位.
  GLUT_WINDOW_WIDTH:当其窗口的宽度,以像素为单位.
  GLUT_WINDOW_HEIGHT:当前窗口的高度,以像素为单位.
  GLUT_WINDOW_BUFFER_SIZE:当前窗口中,颜色分量占用的位数,即用多少bit表示颜色分量.
  GLUT_WINDOW_STENCIL_SIZE:当前窗口中,蒙板分量占用的位数,即用多少bit表示蒙板分量.
  GLUT_WINDOW_DEPTH_SIZE:当前窗口中,深度分量占用的位数,即用多少bit表示深度分量.
  GLUT_WINDOW_RED_SIZE:当前窗口中,红色分量占用的位数,即用多少bit表示红色分量.
  GLUT_WINDOW_GREEN_SIZE:当前窗口中,绿色分量占用的位数,即用多少bit表示绿色分量.
  GLUT_WINDOW_BLUE_SIZE:当前窗口中,蓝色分量占用的位数,即用多少bit表示蓝色分量.
  GLUT_WINDOW_ALPHA_SIZE:当前窗口中,alpha色分量占用的位数,即用多少bit表示alpha色分量.
  GLUT_WINDOW_ACCUM_RED_SIZE:当前窗口累积缓存中,红色分量占用的位数,即用多少bit表示红色分量.
  GLUT_WINDOW_ACCUM_GREEN_SIZE:当前窗口累积缓存中,绿色分量占用的位数,即用多少bit表示绿色分量.
  GLUT_WINDOW_ACCUM_BLUE_SIZE:当前窗口累积缓存中,蓝色分量占用的位数,即用多少bit表示蓝色分量.
  GLUT_WINDOW_ACCUM_ALPHA_SIZE:当前窗口累积缓存中,alpha色分量占用的位数,即用多少bit表示alpha色分量.
  GLUT_WINDOW_DOUBLEBUFFER:如果窗口式双缓存模式,返回1,否则返回0.
  GLUT_WINDOW_RGBA:如果窗口是RGBA模式,返回1,否则返回0.
  GLUT_WINDOW_PARENT:查询当前窗口的父窗口个数,如果为顶层窗口返回0.
  GLUT_WINDOW_NUM_CHILDREN:查询当前窗口的子窗口个数.
  GLUT_WINDOW_NUM_SAMPLES:查询多重采样的采样点个数.
  GLUT_WINDOW_STEREO:查询是否使用立体模式,是则返回1,否则返回0.
  GLUT_WINDOW_CURSOR:返回光标的整数标示.
  GLUT_SCREEN_HEIGHT:屏幕的高度,以像素为单位.
  GLUT_SCREEN_WIDTH:屏幕的宽度,以像素为单位.
  GLUT_SCREEN_WIDTH_MM:屏幕的宽度,以毫米为单位.
  GLUT_SCREEN_HEIGHT_MM:屏幕的高度,以毫米为单位.
  GLUT_MENU_NUM_ITEMS:查询当前菜单包含的菜单项的个数.
  GLUT_DISPLAY_MODE_POSSIBLE:查询窗口系统是否支持当前的显示模式,1表示支持,0表示不支持.
  GLUT_INIT_DISPLAY_MODE:初始窗口的显示模式.
  GLUT_INIT_WINDOW_X:初始窗口的x坐标.
  GLUT_INIT_WINDOW_Y:初始窗口的y坐标.
  GLUT_INIT_WINDOW_WIDTH:初始窗口的宽度.
  GLUT_INIT_WINDOW_HEIGHT:初始窗口的高度.
  GLUT_ELAPSED_TIME:返回两次调用glutGet(GLUT_ELAPSED_TIME)的时间间隔,单位为毫秒,返回值根据查询的内容返回相应的值,无效的状态名返回-1.
  GLUT_WINDOW_COLORMAP_SIZE:返回颜色索引表的大小.

//*******************************************************************************************

int glutDeviceGet(GLenum type);

检索设备信息

参数:
type:要检索的设备信息的名字,为以下常量:
  GLUT_HAS_KEYBOARD 如果键盘可用,返回非0值,否则,返回0.
  GLUT_HAS_MOUSE 如果鼠标可用,返回非0值,否则,返回0.
  GLUT_NUM_MOUSE_BUTTONS 返回鼠标支持的按键数,如果鼠标不可用,返回0,返回值0,表示检索的设备不存在,非0表示设备可用.
  GLUT_HAS_SPACEBALL:如果spaceball可用,返回非0值,否则,返回0.
  GLUT_HAS_DIAL_AND_BUTTON_BOX:如果拨号按键盒可用,返回非0值,否则,返回0.
  GLUT_HAS_TABLET:如果图形板可用,返回非0值,否则,返回0.
  GLUT_NUM_SPACEBALL_BUTTONS:返回spaceball支持的按键数,如果spaceball不存在,返回0.
  GLUT_NUM_BUTTON_BOX_BUTTONS:返回拨号按键盒支持的按键数,如果拨号按键盒不存在,返回0.
  GLUT_NUM_DIALS:返回拨号按键盒支持的拨号数,如果拨号按键盒不存在,返回0.
  GLUT_NUM_TABLET_BUTTONS:返回图形板支持的按键数,如果图形板不存在,返回0.
  GLUT_DEVICE_IGNORE_KEY_REPEAT:如果当前窗口被设置成关闭自动重复按键,则返回非0值.
  GLUT_DEVICE_KEY_REPEAT:返回自动重复按键的设置状态.(说明文件上说是返回连续击键的速率,其实此说法有误.)
  GLUT_HAS_JOYSTICK:如果操纵杆可用,返回非0值,否则,返回0.
  GLUT_OWNS_JOYSTICK:如果glut认为已经成功获得操纵杆的使用权,则返回非0值.否则,返回0.
  GLUT_JOYSTICK_BUTTONS:返回操纵杆支持的按键数,如果操纵杆不存在,返回0.
  GLUT_JOYSTICK_AXES:返回操纵杆支持的操纵轴数,如果操纵杆不存在,返回0.
  GLUT_JOYSTICK_POLL_RATE:返回当前窗口操纵杆被拉动的速率.
(注:对操纵杆的查询限制在操纵杆的数量为1;鼠标被默认为存在,并且其按键数默认是3.)

 //******************************************************************************************
int glutExtensionSupported(const char *name);

判定是否支持特定的OpenGL扩展

参数:
extension:指定要测试的OpenGL扩展的名称,如果给定扩展获得支持,函数返回非0,否则返回0.
必须要有一个有效的当前窗口来调用glutExtensionSupported().它只返回OpenGL扩展信息,这意味着窗口系统依赖的扩展不被glutExtensionSupported()反映.
例子:
if(!glutExtensionSupported("GL_EXT_texture"))
{
 fprintf(stderr, "Missing the texture extension!");
 exit(1);
}

 //******************************************************************************************
 int glutGetModifiers(void);

返回组合功能键的状态

返回值为以下定义的常量
  GLUT_ACTIVE_SHIFT:当按下shift键时
  GLUT_ACTIVE_CTRL:当按下ctrl键时
  GLUT_ACTIVE_ALT:当按下alt键时

 //******************************************************************************************
 int glutLayerGet(GLenum type);

查询属于当前窗口的重叠层的状态

参数:
type:查询的重叠层状态常量:
  GLUT_OVERLAY_POSSIBLE:在给定的初始显示模式下,能否为当前窗口创建重叠层.如果能,返回1;如果不能,返回0.
  GLUT_LAYER_IN_USE:返回当前的使用层,为GLUT_NORMAL(使用正常的颜色层)或GLUT_OVERLAY(使用重叠层).
  GLUT_HAS_OVERLAY:判断当前窗口是否创建了重叠层.
  GLUT_NORMAL_DAMAGED:如果当前窗口的图像层在上一次显示回调函数调用后已经破坏,则返回TRUE.
  GLUT_OVERLAY_DAMAGED:如果当前窗口的重叠层在上一次显示回调函数调用后已经破坏,则返回TRUE.
  GLUT_TRANSPARENT_INDEX:返回当前窗口覆盖层的透明颜色索引值,如果没有覆盖层则返回-1.


posted @ 2009-03-03 15:37 小虫虫 阅读(920) | 评论 (0)编辑 收藏

(转)glut函数详解(10)--设备控制API

void glutIgnoreKeyRepeat(int ignore);

确认是否忽略自动的连续击键(即当一个键被长时间按下不松开时,判断其为一次击键或是多次击键).只对当前窗口有效.对glutKeyboardFunc()和glutSpecialFunc()两个回调函数起作用.

参数:
ignore:(相当于布尔值)
     0  :不忽略,即认为是连续击键
    非0:忽略,即认为是一次击键
 
//*******************************************************************************************
 
void glutSetKeyRepeat(int repeatMode);

设置自动连续击键模式的状态

参数:repeatMode:
GLUT_KEY_REPEAT_OFF    :关闭自动连续击键
GLUT_KEY_REPEAT_ON     :打开自动连续击键
GLUT_KEY_REPEAT_DEFAULT:将自动连续击键模式重置为默认状态
注意:这个函数工作在全局范围内,即它会影响所有窗口而不仅仅是当前窗口,所以当关闭了自动连续击键模式后,确保在关闭当前程序销毁前,将自动连续击键模式重置为默认状态.

这个函数的安全性不好,最好使用安全性高的glutIgnoreKeyRepeat(),尽量将操作限制在当前窗口,而不要轻易使用工作在全局状态下的函数.
 
//*******************************************************************************************


void glutForceJoystickFunc(void);
强制调用当前窗口注册的操纵杆回调函数glutJoystickFunc()一次.

posted @ 2009-03-03 15:37 小虫虫 阅读(559) | 评论 (0)编辑 收藏

(转)glut函数详解(9)--回调API

void glutDisplayFunc(void (*func)(void));

注册当前窗口的显示回调函数

参数:
func:形为void func()的函数,完成具体的绘制操作

这个函数告诉GLUT当窗口内容必须被绘制时,那个函数将被调用.当窗口改变大小或者从被覆盖的状态中恢复,或者由于调用glutPostRedisplay()函数要求GLUT更新时,执行func参数指定的函数.
 
 
//*******************************************************************************************
 
void glutReshapeFunc(void (*func)(int width, int height));

指定当窗口的大小改变时调用的函数

参数:
func:形如void func(int width, int height)
处理窗口大小改变的函数.
width,height:为窗口改变后长宽.

这个函数确定一个回调函数,每当窗口的大小或形状改变时(包括窗口第一次创建),GLUT将会调用这个函数,这个回调函数接受这个窗口新的长宽作为输入参数.
 
 
//*******************************************************************************************
 
void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));

注册当前窗口的键盘回调函数

参数:
func:形如void func(unsigned char key, int x, int y)
key:按键的ASCII码
x,y:当按下键时鼠标的坐标,相对于窗口左上角,以像素为单位

当敲击键盘按键(除了特殊按键,即glutSpecialFunc()中处理的按键,详见glutSpecialFunc())时调用.


//******************************************************************************************
 void glutMouseFunc(void (*func)(int button, int state, int x, int y));

注册当前窗口的鼠标回调函数

参数:
func:形如void func(int button, int state, int x, int y);
button:鼠标的按键,为以下定义的常量
  GLUT_LEFT_BUTTON:鼠标左键
  GLUT_MIDDLE_BUTTON:鼠标中键
  GLUT_RIGHT_BUTTON:鼠标右键
state:鼠标按键的动作,为以下定义的常量
  GLUT_UP:鼠标释放
  GLUT_DOWN:鼠标按下
x,y:鼠标按下式,光标相对于窗口左上角的位置

当点击鼠标时调用.


//******************************************************************************************
void glutMotionFunc(void (*func)(int x, int y));

当鼠标在窗口中按下并移动时调用glutMotionFunc注册的回调函数

void glutPassiveMotionFunc(void (*func)(int x, int y));

当鼠标在窗口中移动时调用glutPassiveMotionFunc注册的回调函数

参数:
func:形如void func(int x, int y);
x,y:鼠标按下式,光标相对于窗口左上角的位置,以像素为单位


//*******************************************************************************************
void glutEntryFunc(void (*func)(int state));

设置鼠标的进出窗口的回调函数

参数:
func:形如void func(int state);注册的鼠标进出回调函数
state:鼠标的进出状态,为以下常量之一
  GLUT_LEFT 鼠标离开窗口
  GLUT_RIGHT 鼠标进入窗口

当窗口取得焦点或失去焦点时调用这个函数,当鼠标进入窗口区域并点击时,state为GLUT_RIGHT,当鼠标离开窗口区域点击其他窗口时,state为GLUT_LEFT.

//******************************************************************************************

void glutVisibilityFunc(void (*func)(int state));

设置当前窗口的可视回调函数

参数:
func:形如void func(int state);指定的可视回调函数
state:窗口的可视性,为以下常量
  GLUT_NOT_VISIBLE 窗口完全不可见
  GLUT_VISIBLE 窗口可见或部分可见

这个函数设置当前窗口的可视回调函数,当窗口的可视性改变时,该窗口的可视回调函数被调用.只要窗口中的任何一个像素是可见的,或者他的任意一个子窗口中任意一个像素是可见的,GLUT则认为窗口是可见的.

//*******************************************************************************************
void glutIdleFunc(void (*func)(void));

设置空闲回调函数

参数:
func:形如void func(void);

当系统空闲时调用.

//*******************************************************************************************
 void glutTimerFunc(unsigned int millis, void (*func)(int value), int value);

注册一个回调函数,当指定时间值到达后,由GLUT调用注册的函数一次

参数:
millis:等待的时间,以毫秒为单位
unc:形如void func(int value)
value:指定的一个数值,用来传递到回调函数func中

这个函数注册了一个回调函数,当指定的毫秒数到达后,这个函数就调用注册的函数,value参数用来向这个注册的函数中传递参数. 但只能触发一次,若要连续触发,则需在func中重新设置计时函数glutTimerFunc();

//*******************************************************************************************
void glutMenuStateFunc(void (*func)(int state));

注册菜单状态回调函数

参数:
func:形如void func(int state);
state:
  GLUT_MENU_IN_USE:菜单被使用.
  GLUT_MENU_NOT_IN_USE:菜单不再被使用,即菜单被关闭.
如果state代入GLUT_MENU_IN_USE,则当菜单被使用时调用该函数;
如果state代入GLUT_MENU_NOT_IN_USE,则当菜单被关闭时调用该函数.

//*******************************************************************************************

void glutMenuStatusFunc(void (*func)(int status, int x, int y));
设置菜单状态回调函数
参数:
func:形如void func(int status, int x, int y);
status:当前是否使用菜单,为以下定义的常量
GLUT_MENU_IN_USE:菜单正在使用
GLUT_MENU_NOT_IN_USE:菜单未被使用
x,y:鼠标按下时,光标相对于窗口左上角的位置
这个函数调用时glut程序判定是否正在使用菜单,当弹出菜单时,调用注册的菜单状态回调函数,同时status设置为常量GLUT_MENU_IN_USE,当菜单使用完毕时,也调用菜单状态回调函数,此时status变量变为GLUT_MENU_NOT_IN_USE.从已弹出的菜单中再弹出的菜单不产生菜单状态回调过程.每个glut程序只有一个菜单状态回调函数. 此函数与上面一个函数相比,只是多传了一个光标位置,其他相同.

//*******************************************************************************************
void glutSpecialFunc(void (*func)(int key, int x, int y));

设置当前窗口的特定键的回调函数

参数:
Func:形如void func(int key, int x, int 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键
x,y:当按下键时鼠标的坐标,相对于窗口左上角,以像素为单位

注意:ESC,回车和delete键由ASCII码产生,即可以用glutKeyboardFunc()处理. 当在键盘上敲击上述按键时调用该函数.注意与glutKeyboardFunc()的区别.

//*******************************************************************************************

void glutSpaceballMotionFunc(void (*func)(int x, int y, int z));

注册一个当前窗口的spaceball平移的回调函数

参数:
func:形如void func(int x, int y, int z);
x,y,z:spaceball的三维空间坐标.
paceball即一种特殊的带3D滚轮的鼠标,不仅可以前后转动,更可以在三维空间里滚动,具体图片,可以在百度里搜索.

当spaceball在当前注册的窗口内平移时,调用该函数.

//*******************************************************************************************
void glutSpaceballRotateFunc(void (*func)(int x, int y, int z));

注册一个当前窗口的spaceball转动的回调函数

参数:
func:形如void func(int x, int y, int z);
当spaceball在当前注册的窗口内滚动时调用.

//*******************************************************************************************

void glutSpaceballButtonFunc(void (*func)(int button, int state));

注册当前窗口的spaceball的按键回调函数.

参数:
func:形如void func(int button, int state);
button:按键编号,从1开始,可用的按键编号可以通过glutDeviceGet(GLUT_NUM_SPACEBALL_BUTTONS)查询.
state:按键状态
  GLUT_UP:按键释放
  GLUT_DOWN:按键按下

当spaceball在当前窗口中敲击相应的按键时调用.

//*******************************************************************************************

void glutButtonBoxFunc(void (*func)(int button, int state));

注册当前窗口的拨号按键盒按键回调函数

参数:
func:形如void func(int button, int state);
button:按键编号,从1开始,可用的按键号可通过glutDeviceGet(GLUT_NUM_BUTTON_BOX_BUTTONS)查询
state:按键状态
  GLUT_UP:按键释放
  GLUT_DOWN:按键按下

当拨号按键盒按键被按下时调用.


//*******************************************************************************************

void glutDialsFunc(void (*func)(int dial, int value));

注册当前窗口的拨号按键盒拨号回调函数.

参数:
func:形如void func(int dial, value);
dial:dial的编号,从1开始,可通过glutDeviceGet(GLUT_NUM_DIALS)查询可用编号.
value:dial所拨的值,value是每次所拨的值的累加,直到溢出.

当拨号按键盒拨号时被调用.

//*******************************************************************************************
void glutTabletMotionFunc(void (*func)(int x, int y));

注册图形板移动回调函数

参数:
func:形如void func(int x, int y);
x,y:图形板移动的坐标.

当图形板移动时调用.

 //******************************************************************************************
void glutTabletButtonFunc(void (*func)(int button, int state, int x, int y));

注册当前窗口的图形板按键回调函数

参数:
func:形如void func(int button, int state, int x, int y);
button:按键号,通过glutDeviceGet(GLUT_NUM_TABLET_BUTTONS)查询可用键号.
state:按键状态.
  GLUT_UP:按键被按下
  GLUT_DOWN:按键被释放

x,y:当按键状态改变时,相对于窗口的坐标.

 //******************************************************************************************
void glutOverlayDisplayFunc(void (*func)(void));

注册当前窗口的重叠层的显示回调函数

参数:
func:形如void func(void);指向重叠层的显示回调函数.

这个函数告诉GLUT当窗口内容必须被绘制时,那个函数将被调用.当窗口改变大小或者从被覆盖的状态中恢复,或者由于调用glutPostOverlayRedisplay()函数要求GLUT更新时,执行func参数指定的函数.

//*******************************************************************************************

void glutWindowStatusFunc(void (*func)(int state));

注册当前窗口状态的回调函数.

参数:
func:形如void func(int state);
state:窗口状态.
  GLUT_HIDDEN:窗口不可见
  GLUT_FULLY_RETAINED:窗口完全未被遮挡
  GLUT_PARTIALLY_RETAINED:窗口部分遮挡
  GLUT_FULLY_COVERED:窗口被全部遮挡

当窗口状态发生相应改变时调用.

//*******************************************************************************************

void glutKeyboardUpFunc(void (*func)(unsigned char key, int x, int y));

注册释放普通按键的回调函数

参数:
func:形如void func(unsigned char key, int x, int y);
key:按键的ASCII码.
x,y:释放按键时鼠标相对于窗口的位置,以像素为单位.

当普通按键被释放时调用.

//*******************************************************************************************


void glutSpecialUpFunc(void (*func)(int key, int x, int y));

注册释放特殊按键的回调函数

参数:
func:形如void func(int key, int x, int 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键
x,y:释放特殊按键时鼠标相对于窗口的位置,以像素为单位.

当特殊按键被释放时调用.

//******************************************************************************************
void glutJoystickFunc(void (*func)(unsigned int buttonMask, int x, int y, int z), int pollInterval);

注册操纵杆的回调函数

参数:
buttonMask:操纵杆按键
GLUT_JOYSTICK_BUTTON_A
GLUT_JOYSTICK_BUTTON_B
GLUT_JOYSTICK_BUTTON_C
GLUT_JOYSTICK_BUTTON_D
x,y,z:操纵杆在三维空间内移动的位移量
pollInterval:确定检测操纵杆的间隔时间,其单位为毫秒.

该函数在两种情况下被调用:
1.在pollInterval所规定的时间间隔内调用.
2.在调用glutForceJoystickFunc()函数时调用一次glutJoystickFunc();

posted @ 2009-03-03 15:36 小虫虫 阅读(1076) | 评论 (0)编辑 收藏

(转)glut函数详解(8)--调试API

void glutReportErrors(void);

这个函数打印出OpenGL的运行时错误,它应该只被用在debug中,因为它的调用会降低OpenGL的速度,它所做的仅仅是不断调用glGetError()直到没有错误产生.每一个错误都以GLUT warning形式报告,并由gluErrorString()产生相应的错误信息.

posted @ 2009-03-03 15:34 小虫虫 阅读(378) | 评论 (0)编辑 收藏

(转)glut函数详解(7)--字体处理API

void glutBitmapCharacter(void *font, int character);

绘制一个图像字符

int glutBitmapWidth(void *font, int character);

返回一个图像字符的宽度

参数:
font:要使用的图像字体,如下表所示:
  GLUT_BITMAP_8_BY_13:一种固定宽度字体,每个字符都放在一个8x13像素的矩形框内
  GLUT_BITMAP_9_BY_15:一种固定宽度字体,每个字符都放在一个9x15像素的矩形框内
  GLUT_BITMAP_TIMES_ROMAN_10:一种10点均匀间距的Times Roman字体
  GLUT_BITMAP_TIMES_ROMAN_24:一种24点均匀间距的Times Roman字体
  GLUT_BITMAP_HELVETICA_10:一种10点均匀间距的Helvetica字体
  GLUT_BITMAP_HELVETICA_12:一种12点均匀间距的Helvetica字体
  GLUT_BITMAP_HELVETICA_18:一种18点均匀间距的Helvetica字体  character:绘制的字符的ASCII码.


int glutBitmapLength(void *font, const unsigned char *string);

获取一个图像字符串的宽度.

参数:
font:同上.
string:想要测量宽度的字符串.

 
//*******************************************************************************************

void glutStrokeCharacter(void *font, int character);

绘制一个图形字符

int glutStrokeWidth(void *font, int character);

返回一个图形字体的宽度

参数:
font:要使用的图形字体,如下表所示:
  GLUT_STROKE_ROMAN 一种等间距的Roman Simplex字体,仅包括32到127的ASCII字符
  GLUT_STROKE_MONO_ROMAN 一种单一间距的Roman Simplex字体,仅包括32到127的ASCII字符
Character:绘制的字符的ASCII码.


int glutStrokeLength(void *font, const unsigned char *string);

获取一个图形字符串的宽度

参数:
font:同上.
string:想要测量宽度的字符串.

posted @ 2009-03-03 15:32 小虫虫 阅读(936) | 评论 (0)编辑 收藏

(转)glut函数详解(6)--颜色索引表管理API

void glutSetColor(int cell, GLfloat red, GLfloat green, GLfloat blue);

设置当前窗口当前层一个颜色表单元的颜色
参数:
cell:索引值,标记在颜色表中的位置,其值从0开始,并且必须小于颜色表的最大单元数.
当前颜色表的大小可通过调用glutGet(GLUT_WINDOW_COLORMAP_SIZE)获得.
red:红色成分
green:绿色成分
blue:蓝色成分

//*******************************************************************************************
GLfloat glutGetColor(int cell, int component);

获取指定的颜色索引的颜色值.
参数:
cell:索引值,标记在颜色表中的位置,其值从0开始,并且必须小于颜色表的最大单元数.
当前颜色表的大小可通过调用glutGet(GLUT_WINDOW_COLORMAP_SIZE)获得.
component:选择下列的值:
  GLUT_RED:让函数返回该索引的红色成分.
  GLUT_GREEN:让函数返回该索引的绿色成分.
  GLUT_BLUE:让函数返回该索引的蓝色成分.

//*******************************************************************************************
void glutCopyColormap(int win);

将逻辑颜色表从指定的窗口拷贝到当前窗口
参数:win:窗口标识符,逻辑颜色表从该窗口拷贝到当前的窗口.

posted @ 2009-03-03 15:31 小虫虫 阅读(775) | 评论 (0)编辑 收藏

(转)glut函数详解(5)--内建模型API

void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);

绘制线框球体

void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);

绘制实心球体

参数:
radius:球体的半径
slices:球体围绕z轴分割的数目
stacks:球体沿着z轴分割的数目
绘制中心在模型坐标原点,半径为radius的球体,球体围绕z轴分割slices次,球体沿着z轴分割stacks次

//*******************************************************************************************

void glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);

绘制线框圆锥体

void glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);

绘制实心圆锥体

参数:
radius:圆锥体的半径
height:圆锥体的高
slices:圆锥体围绕z轴分割的数目
stacks:圆锥体沿着z轴分割的数目
圆锥体的轴为z轴方向,它的基底位于z=0的平面内,顶点z=height,圆锥体围绕z轴分割slices个数目,沿着z轴分割stacks个数目.

//*******************************************************************************************

void glutWireCube(GLdouble size);

绘制线框立方体

void glutSolidCube(GLdouble size);

绘制实心立方体

参数:size:立方体的边长

//*******************************************************************************************

void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);

绘制线框圆环

void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);

绘制实心圆环

参数:
innerRadius:圆环的内半径
outerRadius:圆环的外半径
nsides:圆环腔的分割数
rings:圆环的环线数

//*******************************************************************************************

void glutWireDodecahedron(void);

绘制线框十二面体

void glutSolidDodecahedron(void);

绘制实心十二面体

//*******************************************************************************************

void glutWireTeapot(GLdouble size);

绘制线框茶壶

void glutSolidTeapot(GLdouble size);

绘制实心茶壶

参数:size:茶壶的相对大小

//*******************************************************************************************

void glutWireOctahedron(void);

绘制线框八面体

void glutSolidOctahedron(void);

绘制实心八面体

//*******************************************************************************************

void glutWireTetrahedron(void);

绘制线框四面体

void glutSolidTetrahedron(void);

绘制实心四面体

//*******************************************************************************************

void glutWireIcosahedron(void);

绘制线框二十面体

void glutSolidIcosahedron(void);

绘制实心二十面体


posted @ 2009-03-03 15:30 小虫虫 阅读(1386) | 评论 (0)编辑 收藏

(转)glut函数详解(4)--菜单API

int glutCreateMenu(void (*func)(int value));

创建一个新的弹出示菜单
参数:
func:形如void func(int a);当点击菜单时,调用这个回调函数
value:传递给回调函数的数值,它由所选择的菜单条目对应的整数值所决定
这个函数创建一个新的弹出式菜单,并返回一个唯一的标识次菜单的整型标识符,并将新建的弹出菜单与func函数关联在一起,这样,当选择此菜单中的一个菜单条目时,调用回调函数func.

//******************************************************************************************
void glutDestroyMenu(int menu);

删除指定的菜单
menu:被删除的菜单的标识符

//******************************************************************************************

int glutGetMenu(void);

获取当前菜单的标识符

//******************************************************************************************
void glutSetMenu(int menu);

设置为当前菜单
menu:被设置为当前菜单的标识符

//******************************************************************************************

void glutAddMenuEntry(const char *label, int value);

添加一个菜单条目
参数:
label:菜单条目的名称
value:传递到菜单处理函数的值,即在glutCreateMenu中注册的回调函数
如果用户选择了这个菜单条目,对应的菜单回调函数就被调用,并以value值作为传递给此回调函数的参数:

 //*****************************************************************************************

void glutAddSubMenu(const char *label, int submenu);

在当前菜单的底部增加一个子菜单的触发条目
参数:
label:子菜单触发条目的名称
submenu:子菜单的标识符

 //*****************************************************************************************

void glutChangeToMenuEntry(int item, const char *label, int value);

更改当前菜单中指定菜单项
参数:
item:更改菜单项的索引(最顶层的菜单项的索引为1)
label:菜单条目的名称
value:传递到菜单处理函数的值,即在glutCreateMenu中注册的回调函数

 //*****************************************************************************************

void glutChangeToSubMenu(int item, const char *label, int submenu);

将指定的当前菜单中菜单项变为子菜单触发条目
参数:
item:更改菜单项的索引(最顶层的菜单项的索引为1)
label:子菜单触发条目的名称
submenu:子菜单的标识符

 //*****************************************************************************************

void glutRemoveMenuItem(int item);

删除指定的菜单项
参数:
item:当前菜单中要删除的菜单项的索引(最顶层的菜单项的索引为1)

 //*****************************************************************************************
void glutAttachMenu(int button);

把当前窗口的一个鼠标按键与当前菜单关联起来

void glutDetachMenu(int button);

解除鼠标按键与弹出式菜单的关联关系

参数:
button:指明何种鼠标按键,可用的符号为以下三种:
GLUT_LEFT_BUTTON 鼠标左键
GLUT_RIGHT_BUTTON 鼠标右键
GLUT_MIDDLE_BUTTON 鼠标中键

posted @ 2009-03-03 15:29 小虫虫 阅读(939) | 评论 (0)编辑 收藏

(转)glut函数详解(3)--重叠层API

void glutEstablishOverlay(void);

创建当前窗口的重叠层,该重叠层的显示模式由初始显示模式决定,应在调用glutEstablishOverlay之前调用,glutInitDisplayMode函数来设置初始的显示模式. 实现重叠层需要硬件的支持,并不是所有的系统都提供该支持,如果系统不支持重叠层,那么对glutEstablishOverlay函数的调用就会引起运行错误,GLUT将终止程序的运行.可以调用glutLayerGet(GLUT_OVERPLAY_POSSIBLE)来判断系统是否支持在当前窗口中当前的显示模式下创建重叠层.

//*****************************************************************************************

void glutRemoveOverlay(void);

删除当前层的重叠层

//*****************************************************************************************
void glutUseLayer(GLenum layer);

改变当前窗口的使用层
参数:layer:指定窗口的使用层,为
GLUT_NORMAL:使用正常的颜色层
GLUT_OVERLAY:使用重叠层

 //****************************************************************************************

void glutPostOverlayRedisplay(void);

标记当前窗口的重叠层需要重绘

//****************************************************************************************
void glutPostWindowOverlayRedisplay(int win);

标记指定窗口的重叠层需要重绘
参数:win:需要重绘的窗口的重叠层的标识符

 //***************************************************************************************

void glutShowOverlay(void);

显示当前窗口的重叠层

void glutHideOverlay(void);

隐藏当前窗口的重叠层

这两条语句即时执行.注意一下,只有窗口可视时,使用glutShowOverlay才能使其覆盖图层可视.当窗口被其他窗口遮挡时,其覆盖图层也被遮挡从而不可视.

posted @ 2009-03-03 15:27 小虫虫 阅读(504) | 评论 (0)编辑 收藏

(转)glut函数详解(2)--窗口API


int glutCreateWindow(const char *title);

产生一个顶层的窗口.title作为窗口的名字,也就是窗口标题栏显示的内容.
返回值是生成窗口的标记符,可用函数glutGetWindow()加以引用.
 
//******************************************************************************************
 
int glutCreateSubWindow(int win, int x, int y, int width, int height);
 
创建一个子窗口.win是其父窗口的标记符.x,y是子窗口左上角相对父窗口的位移,以像素表示.width,height是子窗口的宽和高.

 //*****************************************************************************************
void glutDestroyWindow(int win);

销毁窗口,win是所要销毁的窗口的标识符.这个函数销毁指定的窗口以及与窗口关联的OpenGL上下文,重叠层,子窗口等一切与此窗口相关的内容.

 //*****************************************************************************************
void glutPostRedisplay(void);

标记当前窗口的图像层需要重新绘制,在glutMainLoop函数的事件处理循环的下一个循环中,将调用该窗口的显示回调函数重绘该窗口的图像层.

 //******************************************************************************************
void glutPostWindowRedisplay(int win);

标记指定的窗口需重绘,在glutMainLoop函数的事件处理循环的下一个循环中,将调用该窗口的显示回调函数重绘该窗口的图像层.
参数:win:需刷新的窗口标识符

//******************************************************************************************

void glutSwapBuffers(void);

当窗口模式为双缓存时,此函数的功能就是把后台缓存的内容交换到前台显示.当然,只有单缓存时,使用它的功能跟用glFlush()一样.而使用双缓存是为了把完整图画一次性显示在窗口上,或者是为了实现动画.

//******************************************************************************************

int glutGetWindow(void);

返回当前窗口的标识符

//*****************************************************************************************

void glutSetWindow(int win);

设置标记符为win的窗口为当前窗口

//****************************************************************************************

void glutSetWindowTitle(const char *title);

设置当前窗口(必须是顶层窗口)的标题,窗口一旦建立后,窗口标题就可以由这个函数来改变

//****************************************************************************************

 void glutSetIconTitle(const char *title);

设置当前窗口(必须是顶层窗口)图标化时的标题.

 //***************************************************************************************

 void glutPositionWindow(int x, int y);

改变当前窗口的位置:当前窗口是顶层窗口时,x,y是相对于屏幕的的位移;当前窗口若是子窗口时,x,y是相对其父窗口原点的位移.

 //***************************************************************************************

 void glutReshapeWindow(int width, int height);

改变当前窗口的大小.width,height是当前窗口新的宽度和高度值,当然只能是正值.

 //***************************************************************************************
 void glutPopWindow(void);

在同一个父窗口的子窗口中,使当前的子窗口与排列在它前一个位置的子窗***换位置

void glutPushWindow(void);

在同一个父窗口的子窗口中,使当前的子窗口与排列在它后一个位置的子窗***换位置

这两个函数对顶层窗口和子窗口都起作用,但函数的结果并不立即发生,直到下一个事件循环.

 //****************************************************************************************

 void glutIconifyWindow(void);

让当前窗口成为一个图标,也即是最小化,使当前窗口图标化显示.

 //****************************************************************************************

void glutShowWindow(void);

显示当前窗口(这时它还是可能被其它窗口挡住).

//*****************************************************************************************
void glutHideWindow(void);

隐藏当前窗口

//****************************************************************************************

void glutFullScreen(void);

把当前窗口用全屏显示,当前窗口是顶层窗口时才有效.

//****************************************************************************************

 void glutSetCursor(int cursor);

设置当前窗口的光标样式.
参数:
cursor:指定鼠标的形状,为下面的一种值光标的形状
/* Basic arrows. */
GLUT_CURSOR_RIGHT_ARROW
GLUT_CURSOR_LEFT_ARROW
/* Symbolic cursor shapes. */
GLUT_CURSOR_INFO
GLUT_CURSOR_DESTROY
GLUT_CURSOR_HELP
GLUT_CURSOR_CYCLE
GLUT_CURSOR_SPRAY
GLUT_CURSOR_WAIT
GLUT_CURSOR_TEXT
GLUT_CURSOR_CROSSHAIR
/* Directional cursors. */
GLUT_CURSOR_UP_DOWN
GLUT_CURSOR_LEFT_RIGHT
/* Sizing cursors. */
GLUT_CURSOR_TOP_SIDE
GLUT_CURSOR_BOTTOM_SIDE
GLUT_CURSOR_LEFT_SIDE
GLUT_CURSOR_RIGHT_SIDE
GLUT_CURSOR_TOP_LEFT_CORNER
GLUT_CURSOR_TOP_RIGHT_CORNER
GLUT_CURSOR_BOTTOM_RIGHT_CORNER
GLUT_CURSOR_BOTTOM_LEFT_CORNER
/* Fullscreen crosshair (if available). */
GLUT_CURSOR_FULL_CROSSHAIR:
(在全屏模式下使用,等同于GLUT_CURSOR_CROSSHAIR)
/* Blank cursor. */
GLUT_CURSOR_NONE:不显示鼠标
/* Inherit from parent window. */
GLUT_CURSOR_INHERIT:使用父窗口的鼠标

 //****************************************************************************************

void glutWarpPointer(int x, int y);

这个函数将鼠标指针移动到一个相对于当前窗口左上角的新的位置,以窗口左上角为原点,右为X轴正方向,下为Y轴正方向,参数x,y是在这个坐标系中的点,可以为负值.如果坐标值超出屏幕可见范围,则将该值强行控制在屏幕可见范围以内.一般情况下这个函数最好不要使用, 因为鼠标动作还是留给用户控制比较人性化.

posted @ 2009-03-03 15:26 小虫虫 阅读(1125) | 评论 (0)编辑 收藏

仅列出标题
共3页: 1 2 3 
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿(5)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜