??xml version="1.0" encoding="utf-8" standalone="yes"?>精品精品国产自在久久高清,久久天天躁狠狠躁夜夜网站,精品久久久久久国产潘金莲http://www.shnenglu.com/percyph/category/9690.htmlzh-cnTue, 03 Mar 2009 11:15:29 GMTTue, 03 Mar 2009 11:15:29 GMT60Q{Qglut函数详解(13)--视频大小调整APIhttp://www.shnenglu.com/percyph/archive/2009/03/03/75427.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:41:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75427.htmlhttp://www.shnenglu.com/percyph/comments/75427.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75427.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75427.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75427.html阿杰Q-江南暖冬
int glutVideoResizeGet(GLenum param);
q回glut视频大小调整的信?
参数:
param:
  GLUT_VIDEO_RESIZE_POSSIBLE:如果底层支持视频大小调整,则返回非0?否则q回0.如果q回0,则其他视频大调整函数的调用不起作?
  GLUT_VIDEO_RESIZE_IN_USE
  GLUT_VIDEO_RESIZE_X_DELTA
  GLUT_VIDEO_RESIZE_Y_DELTA
  GLUT_VIDEO_RESIZE_WIDTH_DELTA
  GLUT_VIDEO_RESIZE_HEIGHT_DELTA
  GLUT_VIDEO_RESIZE_X
  GLUT_VIDEO_RESIZE_Y
  GLUT_VIDEO_RESIZE_WIDTH
  GLUT_VIDEO_RESIZE_HEIGHT
 
后面几个帔R值在|上没有搜到解释.

//*******************************************************************************************
void glutSetupVideoResizing(void);
 
void glutStopVideoResizing(void);
 
void glutVideoResize(int x, int y, int width, int height);
 
void glutVideoPan(int x, int y, int width, int height);

我把glut的头文g中的所有函数都整理了一?只可?video resize sub-API中的几个函数|上都没有具体的介绍,本菜鸟也无能为力,q好q些函数都不是常用的,我想一般用不着.除了和视频有关的API,前面几个帖子的内容已l基本把glut的所有函数都q了一?本专题也q是完成了,以后如果扑ֈ相关资料,会把q里的补?也希望达够指点一?

]]>
Q{Qglut函数详解(12)--游戏模式APIhttp://www.shnenglu.com/percyph/archive/2009/03/03/75426.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:38:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75426.htmlhttp://www.shnenglu.com/percyph/comments/75426.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75426.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75426.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75426.html 
//*******************************************************************************************
void glutGameModeString(const char *string);
通过一个字W串对game mode(游戏模式,也即全屏模式)q行讄,卛_屏幕q行讄.
参数:
string:一个指向字W串的指?字符串的内容x对屏q的讄.字符串的格式如下所C?
  "W*H"
  "W*H:Bpp"
  "W*H@Rr"
  "W*H:Bpp@Rr"
  "@Rr"
  ":Bpp"
  "Bpp:@Rr"
(?W:屏幕宽度,以像素单?H:屏幕高度,以像素ؓ单位;Bpp:每个像素的内存大?位数);Rr:屏幕的刷新率.)
例子:
1.如果我们只关心屏q大?800*600)而不兛_每个像素的内存占用和h频率,可以写成:
    glutGameModeString("800*600");
2.如果只想把每个像素的内存占用讄?2?可以写成:
    glutGameModeString(":32");
3.如果只想把刷新率讄?5赫兹,可以写成:
    glutGameModeString("@75");
4.如果前三U情况都考虑,可以写成:
    glutGameModeString("800*600:32@75");
其他情况按照上面l出的字W串格式写出卛_.
?
  1.q个函数只是对硬件的h,如果讄不合?则将被忽?
  2.q个函数q不q回错误?如果要获得错误信?则要用glutGameModeGet()函数.

//*******************************************************************************************
int glutEnterGameMode(void);

q入相应的game mode,卌glutGameModeString()的设|生?

//*******************************************************************************************
void glutLeaveGameMode(void);

dglutGameModeString()讄的game mode.

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

int glutGameModeGet(GLenum mode);

设|的模式是否有效

参数:
mode:
  GLUT_GAME_MODE_ACTIVE:如果E序q行在game mode,则返回非0?如果q行在窗口模?则返?.
  GLUT_GAME_MODE_POSSIBLE:判断glutAameModeString()的设|是否有?如果有效则返回非0?否则q回0.但是glut手册中有一个警?即ɘq个讄是有效的,也不能保证屏q设|可以一定成功生?
  GLUT_GAME_MODE_WIDTH:q回屏幕的宽?
  GLUT_GAME_MODE_HEIGHT:q回屏幕的高?
  GLUT_GAME_MODE_PIXEL_DEPTH:q回当前模式下每个像素所占用的内存空?位数).
  GLUT_GAME_MODE_REFRESH_RATE:q回实际的刷新率(单位赫兹).
  GLUT_GAME_MODE_DISPLAY_CHANGED:正如前面所?不能保证屏幕昄模式一定根据设|发生改?q个帔R可以用来试是否真的q入了game mode(先前是窗口模式下的情况下),如果先前已经是game mode,则可以用来测试设|是否发生改?q回?DC入了game mode或设|已l发生改?否则q回0.


]]>
Q{Qglut函数详解(10)--讑֤控制APIhttp://www.shnenglu.com/percyph/archive/2009/03/03/75424.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:37:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75424.htmlhttp://www.shnenglu.com/percyph/comments/75424.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75424.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75424.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75424.html
认是否忽略自动的连l击?卛_一个键被长旉按下不松开?判断其ؓ一ơ击键或是多ơ击?.只对当前H口有效.对glutKeyboardFunc()和glutSpecialFunc()两个回调函数起作?

参数:
ignore:(相当于布?
     0  :不忽?卌为是q箋击键
    ?:忽略,卌为是一ơ击?br> 
//*******************************************************************************************
 
void glutSetKeyRepeat(int repeatMode);

讄自动q箋击键模式的状?br>
参数:repeatMode:
GLUT_KEY_REPEAT_OFF    :关闭自动q箋击键
GLUT_KEY_REPEAT_ON     :打开自动q箋击键
GLUT_KEY_REPEAT_DEFAULT:自动连l击键模式重|ؓ默认状?br>注意:q个函数工作在全局范围?卛_会媄响所有窗口而不仅仅是当前窗?所以当关闭了自动连l击键模式后,保在关闭当前程序销毁前,自动连l击键模式重|ؓ默认状?

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


void glutForceJoystickFunc(void);
强制调用当前H口注册的操U|回调函数glutJoystickFunc()一?

]]>
Q{Qglut函数详解(11)--状态查询APIhttp://www.shnenglu.com/percyph/archive/2009/03/03/75425.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:37:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75425.htmlhttp://www.shnenglu.com/percyph/comments/75425.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75425.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75425.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75425.html
索指定的GLUT状?br>
参数:
state:指定要检索的状态类?Z下常?
  GLUT_WINDOW_X:当前H口的x坐标,以像素ؓ单位.
  GLUT_WINDOW_Y:当前H口的y坐标,以像素ؓ单位.
  GLUT_WINDOW_WIDTH:当其H口的宽?以像素ؓ单位.
  GLUT_WINDOW_HEIGHT:当前H口的高?以像素ؓ单位.
  GLUT_WINDOW_BUFFER_SIZE:当前H口?颜色分量占用的位?即用多少bit表示颜色分量.
  GLUT_WINDOW_STENCIL_SIZE:当前H口?蒙板分量占用的位?即用多少bit表示蒙板分量.
  GLUT_WINDOW_DEPTH_SIZE:当前H口?深度分量占用的位?即用多少bit表示深度分量.
  GLUT_WINDOW_RED_SIZE:当前H口?U色分量占用的位?即用多少bit表示U色分量.
  GLUT_WINDOW_GREEN_SIZE:当前H口?l色分量占用的位?即用多少bit表示l色分量.
  GLUT_WINDOW_BLUE_SIZE:当前H口?蓝色分量占用的位?即用多少bit表示蓝色分量.
  GLUT_WINDOW_ALPHA_SIZE:当前H口?alpha色分量占用的位数,即用多少bit表示alpha色分?
  GLUT_WINDOW_ACCUM_RED_SIZE:当前H口累积~存?U色分量占用的位?即用多少bit表示U色分量.
  GLUT_WINDOW_ACCUM_GREEN_SIZE:当前H口累积~存?l色分量占用的位?即用多少bit表示l色分量.
  GLUT_WINDOW_ACCUM_BLUE_SIZE:当前H口累积~存?蓝色分量占用的位?即用多少bit表示蓝色分量.
  GLUT_WINDOW_ACCUM_ALPHA_SIZE:当前H口累积~存?alpha色分量占用的位数,即用多少bit表示alpha色分?
  GLUT_WINDOW_DOUBLEBUFFER:如果H口式双~存模式,q回1,否则q回0.
  GLUT_WINDOW_RGBA:如果H口是RGBA模式,q回1,否则q回0.
  GLUT_WINDOW_PARENT:查询当前H口的父H口个数,如果为顶层窗口返?.
  GLUT_WINDOW_NUM_CHILDREN:查询当前H口的子H口个数.
  GLUT_WINDOW_NUM_SAMPLES:查询多重采样的采L个数.
  GLUT_WINDOW_STEREO:查询是否使用立体模式,是则q回1,否则q回0.
  GLUT_WINDOW_CURSOR:q回光标的整数标C?
  GLUT_SCREEN_HEIGHT:屏幕的高?以像素ؓ单位.
  GLUT_SCREEN_WIDTH:屏幕的宽?以像素ؓ单位.
  GLUT_SCREEN_WIDTH_MM:屏幕的宽?以毫cؓ单位.
  GLUT_SCREEN_HEIGHT_MM:屏幕的高?以毫cؓ单位.
  GLUT_MENU_NUM_ITEMS:查询当前菜单包含的菜单项的个?
  GLUT_DISPLAY_MODE_POSSIBLE:查询H口pȝ是否支持当前的显C模?1表示支持,0表示不支?
  GLUT_INIT_DISPLAY_MODE:初始H口的显C模?
  GLUT_INIT_WINDOW_X:初始H口的x坐标.
  GLUT_INIT_WINDOW_Y:初始H口的y坐标.
  GLUT_INIT_WINDOW_WIDTH:初始H口的宽?
  GLUT_INIT_WINDOW_HEIGHT:初始H口的高?
  GLUT_ELAPSED_TIME:q回两次调用glutGet(GLUT_ELAPSED_TIME)的时间间?单位为毫U?q回值根据查询的内容q回相应的?无效的状态名q回-1.
  GLUT_WINDOW_COLORMAP_SIZE:q回颜色索引表的大小.

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

int glutDeviceGet(GLenum type);

索设备信?br>
参数:
type:要检索的讑֤信息的名?Z下常?
  GLUT_HAS_KEYBOARD 如果键盘可用,q回??否则,q回0.
  GLUT_HAS_MOUSE 如果鼠标可用,q回??否则,q回0.
  GLUT_NUM_MOUSE_BUTTONS q回鼠标支持的按键数,如果鼠标不可?q回0,q回?,表示索的讑֤不存??表示讑֤可用.
  GLUT_HAS_SPACEBALL:如果spaceball可用,q回??否则,q回0.
  GLUT_HAS_DIAL_AND_BUTTON_BOX:如果拨号按键盒可?q回??否则,q回0.
  GLUT_HAS_TABLET:如果囑Ş板可?q回??否则,q回0.
  GLUT_NUM_SPACEBALL_BUTTONS:q回spaceball支持的按键数,如果spaceball不存?q回0.
  GLUT_NUM_BUTTON_BOX_BUTTONS:q回拨号按键盒支持的按键?如果拨号按键盒不存在,q回0.
  GLUT_NUM_DIALS:q回拨号按键盒支持的拨号?如果拨号按键盒不存在,q回0.
  GLUT_NUM_TABLET_BUTTONS:q回囑Ş板支持的按键?如果囑Ş板不存在,q回0.
  GLUT_DEVICE_IGNORE_KEY_REPEAT:如果当前H口被设|成关闭自动重复按键,则返回非0?
  GLUT_DEVICE_KEY_REPEAT:q回自动重复按键的设|状?(说明文g上说是返回连l击键的速率,其实此说法有?)
  GLUT_HAS_JOYSTICK:如果操纵杆可?q回??否则,q回0.
  GLUT_OWNS_JOYSTICK:如果glut认ؓ已经成功获得操纵杆的使用?则返回非0?否则,q回0.
  GLUT_JOYSTICK_BUTTONS:q回操纵杆支持的按键?如果操纵杆不存在,q回0.
  GLUT_JOYSTICK_AXES:q回操纵杆支持的操纵轴数,如果操纵杆不存在,q回0.
  GLUT_JOYSTICK_POLL_RATE:q回当前H口操纵杆被拉动的速率.
(?ҎU|的查询限制在操纵杆的数量?;鼠标被默认ؓ存在,q且其按键数默认?.)

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

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

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

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

q回l合功能键的状?br>
q回gؓ以下定义的常?br>  GLUT_ACTIVE_SHIFT:当按下shift键时
  GLUT_ACTIVE_CTRL:当按下ctrl键时
  GLUT_ACTIVE_ALT:当按下alt键时

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

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




]]>
Q{Qglut函数详解(9)--回调APIhttp://www.shnenglu.com/percyph/archive/2009/03/03/75423.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:36:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75423.htmlhttp://www.shnenglu.com/percyph/comments/75423.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75423.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75423.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75423.html
注册当前H口的显C回调函?br>
参数:
func:形ؓvoid func()的函?完成具体的绘制操?br>
q个函数告诉GLUT当窗口内容必被l制?那个函数被调用.当窗口改变大或者从被覆盖的状态中恢复,或者由于调用glutPostRedisplay()函数要求GLUT更新?执行func参数指定的函?
 
 
//*******************************************************************************************
 
void glutReshapeFunc(void (*func)(int width, int height));

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

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

q个函数定一个回调函?每当H口的大或形状改变?包括H口W一ơ创?,GLUT会调用q个函数,q个回调函数接受q个H口新的长宽作ؓ输入参数.
 
 
//*******************************************************************************************
 
void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));

注册当前H口的键盘回调函?br>
参数:
func:形如void func(unsigned char key, int x, int y)
key:按键的ASCII?br>x,y:当按下键旉标的坐标,相对于窗口左上角,以像素ؓ单位

当敲击键盘按?除了Ҏ按键,即glutSpecialFunc()中处理的按键,详见glutSpecialFunc())时调?


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

注册当前H口的鼠标回调函?br>
参数:
func:形如void func(int button, int state, int x, int y);
button:鼠标的按?Z下定义的帔R
  GLUT_LEFT_BUTTON:鼠标左键
  GLUT_MIDDLE_BUTTON:鼠标中键
  GLUT_RIGHT_BUTTON:鼠标右键
state:鼠标按键的动?Z下定义的帔R
  GLUT_UP:鼠标释放
  GLUT_DOWN:鼠标按下
x,y:鼠标按下?光标相对于窗口左上角的位|?br>
当点击鼠标时调用.


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

当鼠标在H口中按下ƈUd时调用glutMotionFunc注册的回调函?br>
void glutPassiveMotionFunc(void (*func)(int x, int y));

当鼠标在H口中移动时调用glutPassiveMotionFunc注册的回调函?br>
参数:
func:形如void func(int x, int y);
x,y:鼠标按下?光标相对于窗口左上角的位|?以像素ؓ单位


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

讄鼠标的进出窗口的回调函数

参数:
func:形如void func(int state);注册的鼠标进出回调函?br>state:鼠标的进出状?Z下常量之一
  GLUT_LEFT 鼠标dH口
  GLUT_RIGHT 鼠标q入H口

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

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

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

讄当前H口的可视回调函?br>
参数:
func:形如void func(int state);指定的可视回调函?br>state:H口的可视?Z下常?br>  GLUT_NOT_VISIBLE H口完全不可?br>  GLUT_VISIBLE H口可见或部分可?br>
q个函数讄当前H口的可视回调函?当窗口的可视性改变时,该窗口的可视回调函数被调?只要H口中的M一个像素是可见?或者他的Q意一个子H口中Q意一个像素是可见?GLUT则认为窗口是可见?

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

讄I闲回调函数

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

当系l空闲时调用.

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

注册一个回调函?当指定时间值到辑֐,由GLUT调用注册的函C?br>
参数:
millis:{待的时?以毫Uؓ单位
unc:形如void func(int value)
value:指定的一个数?用来传递到回调函数func?br>
q个函数注册了一个回调函?当指定的毫秒数到辑֐,q个函数p用注册的函数,value参数用来向这个注册的函数中传递参? 但只能触发一?若要q箋触发,则需在func中重新设|计时函数glutTimerFunc();

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

注册菜单状态回调函?br>
参数:
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));
讄菜单状态回调函?br>参数:
func:形如void func(int status, int x, int y);
status:当前是否使用菜单,Z下定义的帔R
GLUT_MENU_IN_USE:菜单正在使用
GLUT_MENU_NOT_IN_USE:菜单未被使用
x,y:鼠标按下?光标相对于窗口左上角的位|?br>q个函数调用时glutE序判定是否正在使用菜单,当弹单时,调用注册的菜单状态回调函?同时status讄为常量GLUT_MENU_IN_USE,当菜单用完毕时,也调用菜单状态回调函?此时status变量变ؓGLUT_MENU_NOT_IN_USE.从已弹出的菜单中再弹出的菜单不生菜单状态回调过E?每个glutE序只有一个菜单状态回调函? 此函C上面一个函数相?只是多传了一个光标位|?其他相同.

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

讄当前H口的特定键的回调函?br>
参数:
Func:形如void func(int key, int x, int y);
key:按下的特定键,Z下定义的帔R
  GLUT_KEY_F1:F1功能?br>  GLUT_KEY_F2:F2功能?br>  GLUT_KEY_F3:F3功能?br>  GLUT_KEY_F4:F4功能?br>  GLUT_KEY_F5:F5功能?br>  GLUT_KEY_F6:F6功能?br>  GLUT_KEY_F7:F7功能?br>  GLUT_KEY_F8:F8功能?br>  GLUT_KEY_F9:F9功能?br>  GLUT_KEY_F10:F10功能?br>  GLUT_KEY_F11:F11功能?br>  GLUT_KEY_F12:F12功能?br>  GLUT_KEY_LEFT:左方向键
  GLUT_KEY_UP:上方向键
  GLUT_KEY_RIGHT:x向键
  GLUT_KEY_DOWN:下方向键
  GLUT_KEY_PAGE_UP:PageUp?br>  GLUT_KEY_PAGE_DOWN:PageDown?br>  GLUT_KEY_HOME:Home?br>  GLUT_KEY_END:End?br>  GLUT_KEY_INSERT:Insert?br>x,y:当按下键旉标的坐标,相对于窗口左上角,以像素ؓ单位

注意:ESC,回R和delete键由ASCII码?卛_以用glutKeyboardFunc()处理. 当在键盘上敲Mq按键时调用该函?注意与glutKeyboardFunc()的区?

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

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

注册一个当前窗口的spaceballq移的回调函?br>
参数:
func:形如void func(int x, int y, int z);
x,y,z:spaceball的三l空间坐?
paceball即一U特D的?D滚轮的鼠?不仅可以前后转动,更可以在三维I间里滚?具体囄,可以在百度里搜烦.

当spaceball在当前注册的H口内^UL,调用该函?

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

注册一个当前窗口的spaceball转动的回调函?br>
参数:
func:形如void func(int x, int y, int z);
当spaceball在当前注册的H口内滚动时调用.

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

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

注册当前H口的spaceball的按键回调函?

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

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

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

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

注册当前H口的拨h键盒按键回调函数

参数:
func:形如void func(int button, int state);
button:按键~号,?开?可用的按键号可通过glutDeviceGet(GLUT_NUM_BUTTON_BOX_BUTTONS)查询
state:按键状?br>  GLUT_UP:按键释放
  GLUT_DOWN:按键按下

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


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

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

注册当前H口的拨h键盒拨号回调函数.

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

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

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

注册囑Ş板移动回调函?br>
参数:
func:形如void func(int x, int y);
x,y:囑Ş板移动的坐标.

当图形板Ud时调?

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

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

参数:
func:形如void func(int button, int state, int x, int y);
button:按键?通过glutDeviceGet(GLUT_NUM_TABLET_BUTTONS)查询可用键号.
state:按键状?
  GLUT_UP:按键被按?br>  GLUT_DOWN:按键被释?br>
x,y:当按键状态改变时,相对于窗口的坐标.

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

注册当前H口的重叠层的显C回调函?br>
参数:
func:形如void func(void);指向重叠层的昄回调函数.

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

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

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

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

参数:
func:形如void func(int state);
state:H口状?
  GLUT_HIDDEN:H口不可?br>  GLUT_FULLY_RETAINED:H口完全未被遮挡
  GLUT_PARTIALLY_RETAINED:H口部分遮挡
  GLUT_FULLY_COVERED:H口被全部遮?br>
当窗口状态发生相应改变时调用.

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

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:释放按键旉标相对于H口的位|?以像素ؓ单位.

当普通按键被释放时调?

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


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

注册释放Ҏ按键的回调函?br>
参数:
func:形如void func(int key, int x, int y);
key:Ҏ按键的标?br>  GLUT_KEY_F1:F1功能?br>  GLUT_KEY_F2:F2功能?br>  GLUT_KEY_F3:F3功能?br>  GLUT_KEY_F4:F4功能?br>  GLUT_KEY_F5:F5功能?br>  GLUT_KEY_F6:F6功能?br>  GLUT_KEY_F7:F7功能?br>  GLUT_KEY_F8:F8功能?br>  GLUT_KEY_F9:F9功能?br>  GLUT_KEY_F10:F10功能?br>  GLUT_KEY_F11:F11功能?br>  GLUT_KEY_F12:F12功能?br>  GLUT_KEY_LEFT:左方向键
  GLUT_KEY_UP:上方向键
  GLUT_KEY_RIGHT:x向键
  GLUT_KEY_DOWN:下方向键
  GLUT_KEY_PAGE_UP:PageUp?br>  GLUT_KEY_PAGE_DOWN:PageDown?br>  GLUT_KEY_HOME:Home?br>  GLUT_KEY_END:End?br>  GLUT_KEY_INSERT:Insert?br>x,y:释放Ҏ按键旉标相对于H口的位|?以像素ؓ单位.

当特D按键被释放时调?

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

注册操纵杆的回调函数

参数:
buttonMask:操纵杆按?br>GLUT_JOYSTICK_BUTTON_A
GLUT_JOYSTICK_BUTTON_B
GLUT_JOYSTICK_BUTTON_C
GLUT_JOYSTICK_BUTTON_D
x,y,z:操纵杆在三维I间内移动的位移?br>pollInterval:定操U|的间隔时?其单位ؓ毫秒.

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

]]>
Q{Qglut函数详解(8)--调试APIhttp://www.shnenglu.com/percyph/archive/2009/03/03/75422.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:34:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75422.htmlhttp://www.shnenglu.com/percyph/comments/75422.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75422.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75422.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75422.html
q个函数打印出OpenGL的运行时错误,它应该只被用在debug?因ؓ它的调用会降低OpenGL的速度,它所做的仅仅是不断调用glGetError()直到没有错误产生.每一个错误都以GLUT warning形式报告,q由gluErrorString()产生相应的错误信?


]]>
Q{Qglut函数详解(7)--字体处理APIhttp://www.shnenglu.com/percyph/archive/2009/03/03/75421.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:32:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75421.htmlhttp://www.shnenglu.com/percyph/comments/75421.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75421.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75421.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75421.html
l制一个图像字W?br>
int glutBitmapWidth(void *font, int character);

q回一个图像字W的宽度

参数:
font:要用的囑փ字体,如下表所C?
  GLUT_BITMAP_8_BY_13:一U固定宽度字?每个字符都放在一?x13像素的矩形框?br>  GLUT_BITMAP_9_BY_15:一U固定宽度字?每个字符都放在一?x15像素的矩形框?br>  GLUT_BITMAP_TIMES_ROMAN_10:一U?0点均匀间距的Times Roman字体
  GLUT_BITMAP_TIMES_ROMAN_24:一U?4点均匀间距的Times Roman字体
  GLUT_BITMAP_HELVETICA_10:一U?0点均匀间距的Helvetica字体
  GLUT_BITMAP_HELVETICA_12:一U?2点均匀间距的Helvetica字体
  GLUT_BITMAP_HELVETICA_18:一U?8点均匀间距的Helvetica字体  character:l制的字W的ASCII?


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

获取一个图像字W串的宽?

参数:
font:同上.
string:惌量宽度的字W串.

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

void glutStrokeCharacter(void *font, int character);

l制一个图形字W?br>
int glutStrokeWidth(void *font, int character);

q回一个图形字体的宽度

参数:
font:要用的囑Ş字体,如下表所C?
  GLUT_STROKE_ROMAN 一U等间距的Roman Simplex字体,仅包?2?27的ASCII字符
  GLUT_STROKE_MONO_ROMAN 一U单一间距的Roman Simplex字体,仅包?2?27的ASCII字符
Character:l制的字W的ASCII?


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

获取一个图形字W串的宽?br>
参数:
font:同上.
string:惌量宽度的字W串.


]]>
Q{Qglut函数详解(6)--颜色索引表管理APIhttp://www.shnenglu.com/percyph/archive/2009/03/03/75420.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:31:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75420.htmlhttp://www.shnenglu.com/percyph/comments/75420.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75420.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75420.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75420.html
讄当前H口当前层一个颜色表单元的颜?br>参数:
cell:索引?标记在颜色表中的位置,其g0开?q且必须于颜色表的最大单元数.
当前颜色表的大小可通过调用glutGet(GLUT_WINDOW_COLORMAP_SIZE)获得.
red:U色成分
green:l色成分
blue:蓝色成分

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

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

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

逻辑颜色表从指定的窗口拷贝到当前H口
参数:win:H口标识W?逻辑颜色表从该窗口拷贝到当前的窗?


]]>
Q{Qglut函数详解(5)--内徏模型APIhttp://www.shnenglu.com/percyph/archive/2009/03/03/75419.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:30:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75419.htmlhttp://www.shnenglu.com/percyph/comments/75419.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75419.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75419.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75419.html
l制U框球体

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

l制实心球体

参数:
radius:球体的半?br>slices:球体围绕z轴分割的数目
stacks:球体沿着z轴分割的数目
l制中心在模型坐标原?半径为radius的球?球体围绕z轴分割slices?球体沿着z轴分割stacks?br>
//*******************************************************************************************

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

l制U框圆锥?br>
void glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);

l制实心圆锥?br>
参数:
radius:圆锥体的半径
height:圆锥体的?br>slices:圆锥体围lz轴分割的数目
stacks:圆锥体沿着z轴分割的数目
圆锥体的轴ؓz轴方?它的基底位于z=0的^面内,点z=height,圆锥体围lz轴分割slices个数?沿着z轴分割stacks个数?

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

void glutWireCube(GLdouble size);

l制U框立方?br>
void glutSolidCube(GLdouble size);

l制实心立方?br>
参数:size:立方体的辚w

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

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

l制U框圆环

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

l制实心圆环

参数:
innerRadius:圆环的内半径
outerRadius:圆环的外半径
nsides:圆环腔的分割?br>rings:圆环的环U数

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

void glutWireDodecahedron(void);

l制U框十二面体

void glutSolidDodecahedron(void);

l制实心十二面体

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

void glutWireTeapot(GLdouble size);

l制U框茶壶

void glutSolidTeapot(GLdouble size);

l制实心茶壶

参数:size:茶壶的相对大?br>
//*******************************************************************************************

void glutWireOctahedron(void);

l制U框八面?br>
void glutSolidOctahedron(void);

l制实心八面?br>
//*******************************************************************************************

void glutWireTetrahedron(void);

l制U框四面?br>
void glutSolidTetrahedron(void);

l制实心四面?br>
//*******************************************************************************************

void glutWireIcosahedron(void);

l制U框二十面体

void glutSolidIcosahedron(void);

l制实心二十面体




]]>
Q{Qglut函数详解(4)--菜单APIhttp://www.shnenglu.com/percyph/archive/2009/03/03/75418.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:29:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75418.htmlhttp://www.shnenglu.com/percyph/comments/75418.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75418.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75418.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75418.html
创徏一个新的弹出示菜单
参数:
func:形如void func(int a);当点击菜单时,调用q个回调函数
value:传递给回调函数的数?它由所选择的菜单条目对应的整数值所军_
q个函数创徏一个新的弹出式菜单,q返回一个唯一的标识次菜单的整型标识符,q将新徏的弹单与func函数兌在一?q样,当选择此菜单中的一个菜单条目时,调用回调函数func.

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

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

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

int glutGetMenu(void);

获取当前菜单的标识符

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

讄为当前菜?br>menu:被设|ؓ当前菜单的标识符

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

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

d一个菜单条?br>参数:
label:菜单条目的名U?br>value:传递到菜单处理函数的?卛_glutCreateMenu中注册的回调函数
如果用户选择了这个菜单条?对应的菜单回调函数就被调?q以valuegZ递给此回调函数的参数:

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

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

在当前菜单的底部增加一个子菜单的触发条?br>参数:
label:子菜单触发条目的名称
submenu:子菜单的标识W?br>
 //*****************************************************************************************

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

更改当前菜单中指定菜单项
参数:
item:更改菜单的索引(最层的菜单项的烦引ؓ1)
label:菜单条目的名U?br>value:传递到菜单处理函数的?卛_glutCreateMenu中注册的回调函数

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

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

指定的当前菜单中菜单项变ؓ子菜单触发条?br>参数:
item:更改菜单的索引(最层的菜单项的烦引ؓ1)
label:子菜单触发条目的名称
submenu:子菜单的标识W?br>
 //*****************************************************************************************

void glutRemoveMenuItem(int item);

删除指定的菜单项
参数:
item:当前菜单中要删除的菜单项的烦?最层的菜单项的烦引ؓ1)

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

把当前窗口的一个鼠标按键与当前菜单兌h

void glutDetachMenu(int button);

解除鼠标按键与弹出式菜单的关联关p?br>
参数:
button:指明何种鼠标按键,可用的符号ؓ以下三种:
GLUT_LEFT_BUTTON 鼠标左键
GLUT_RIGHT_BUTTON 鼠标右键
GLUT_MIDDLE_BUTTON 鼠标中键


]]>
Q{Qglut函数详解(3)--重叠层APIhttp://www.shnenglu.com/percyph/archive/2009/03/03/75417.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:27:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75417.htmlhttp://www.shnenglu.com/percyph/comments/75417.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75417.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75417.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75417.html
创徏当前H口的重叠层,该重叠层的显C模式由初始昄模式军_,应在调用glutEstablishOverlay之前调用,glutInitDisplayMode函数来设|初始的昄模式. 实现重叠层需要硬件的支持,q不是所有的pȝ都提供该支持,如果pȝ不支持重叠层,那么对glutEstablishOverlay函数的调用就会引赯行错?GLUT终止程序的q行.可以调用glutLayerGet(GLUT_OVERPLAY_POSSIBLE)来判断系l是否支持在当前H口中当前的昄模式下创建重叠层.

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

void glutRemoveOverlay(void);

删除当前层的重叠?br>
//*****************************************************************************************
void glutUseLayer(GLenum layer);

改变当前H口的用层
参数:layer:指定H口的用层,?br>GLUT_NORMAL:使用正常的颜色层
GLUT_OVERLAY:使用重叠?br>
 //****************************************************************************************

void glutPostOverlayRedisplay(void);

标记当前H口的重叠层需要重l?br>
//****************************************************************************************
void glutPostWindowOverlayRedisplay(int win);

标记指定H口的重叠层需要重l?br>参数:win:需要重l的H口的重叠层的标识符

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

void glutShowOverlay(void);

昄当前H口的重叠层

void glutHideOverlay(void);

隐藏当前H口的重叠层

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



]]>
Q{Qglut函数详解(2)--H口APIhttp://www.shnenglu.com/percyph/archive/2009/03/03/75416.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:26:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75416.htmlhttp://www.shnenglu.com/percyph/comments/75416.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75416.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75416.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75416.htmlint glutCreateWindow(const char *title);

产生一个顶层的H口.title作ؓH口的名?也就是窗口标题栏昄的内?
q回值是生成H口的标记符,可用函数glutGetWindow()加以引用.
 
//******************************************************************************************
 
int glutCreateSubWindow(int win, int x, int y, int width, int height);
 
创徏一个子H口.win是其父窗口的标记W?x,y是子H口左上角相对父H口的位U?以像素表C?width,height是子H口的宽和高.

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

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

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

标记当前H口的图像层需要重新绘?在glutMainLoop函数的事件处理@环的下一个@环中,调用该H口的显C回调函数重l该H口的图像层.

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

标记指定的窗口需重绘,在glutMainLoop函数的事件处理@环的下一个@环中,调用该H口的显C回调函数重l该H口的图像层.
参数:win:需h的窗口标识符

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

void glutSwapBuffers(void);

当窗口模式ؓ双缓存时,此函数的功能是把后台缓存的内容交换到前台显C?当然,只有单缓存时,使用它的功能跟用glFlush()一?而用双~存是ؓ了把完整囄一ơ性显C在H口?或者是Z实现动画.

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

int glutGetWindow(void);

q回当前H口的标识符

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

void glutSetWindow(int win);

讄标记Wؓwin的窗口ؓ当前H口

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

void glutSetWindowTitle(const char *title);

讄当前H口Q必L层H口Q的标题,H口一旦徏立后,H口标题可以由q个函数来改?br>
//****************************************************************************************

 void glutSetIconTitle(const char *title);

讄当前H口Q必L层H口Q图标化时的标题.

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

 void glutPositionWindow(int x, int y);

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

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

 void glutReshapeWindow(int width, int height);

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

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

在同一个父H口的子H口?使当前的子窗口与排列在它前一个位|的子窗***换位|?br>
void glutPushWindow(void);

在同一个父H口的子H口?使当前的子窗口与排列在它后一个位|的子窗***换位|?br>
q两个函数对层H口和子H口都v作用,但函数的l果q不立即发生,直到下一个事件@?

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

 void glutIconifyWindow(void);

让当前窗口成Z个图?也即是最化,使当前窗口图标化昄.

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

void glutShowWindow(void);

昄当前H口Q这时它q是可能被其它窗口挡住).

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

隐藏当前H口

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

void glutFullScreen(void);

把当前窗口用全屏昄,当前H口是顶层窗口时才有?

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

 void glutSetCursor(int cursor);

讄当前H口的光标样?
参数:
cursor:指定鼠标的Ş?Z面的一U值光标的形状
/* 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:不显C鼠?br>/* Inherit from parent window. */
GLUT_CURSOR_INHERIT:使用父窗口的鼠标

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

void glutWarpPointer(int x, int y);

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

]]>
Q{Qglut函数详解(1)--glut初始化APIhttp://www.shnenglu.com/percyph/archive/2009/03/03/75414.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:15:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75414.htmlhttp://www.shnenglu.com/percyph/comments/75414.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75414.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75414.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75414.htmlhttp://old.blog.edu.cn/user3/zjdukang/archives/2007/1751751.shtml
(1)    void glutInit(int *argc, char **argv);
     q个函数用来初始化GLUT?q个函数从main函数获取其两个参?对应main函数的Ş式应是:int main(int argc,char* argv[]);
//*******************************************************************************************
(2)    void glutInitDisplayMode(unsigned int mode);
讄囑Ş昄模式.参数mode的可选gؓ:
     GLUT_RGBA:当未指明GLUT—RGBA或GLUT—INDEX?是默认用的模式.表明Ʋ徏立RGBA模式的窗?
     GLUT_RGB:与GLUT—RGBA作用相同.
     GLUT_INDEX:指明为颜色烦引模?
     GLUT_SINGLE:只用单~存
     GLUT_DOUBLE:使用双缓?以避免把计算Z囄q程都表现出?或者ؓ了^滑地实现动画.
     GLUT_ACCUM:让窗口用篏加的~存.
     GLUT_ALPHA:让颜色缓冲区使用alphalg.
     GLUT_DEPTH:使用深度~存.
     GLUT_STENCIL:使用模板~存.
     GLUT_MULTISAMPLE:让窗口支持多例程.
     GLUT_STEREO:使窗口支持立?
     GLUT_LUMINACE:luminance是亮度的意?但是很遗?在多数OpenGLq_?不被支持.
//******************************************************************************************
(3)    void glutInitWindowPosition(int x, int y);
讄初始H口的位|?H口左上角相对于桌面坐标(x,y))
//******************************************************************************************
(4)    void glutInitWindowSize(int width, int height);
讄初始H口的大?br>//******************************************************************************************
(5)    void glutMainLoop(void);
让glutE序q入事g循环.在一个glutE序中最多只能调用一?且必调?一旦调?会直到程序结束才q回.
//******************************************************************************************
(6)    void glutInitDisplayString(const char *string);
通过一个字W串初始化display mode
参数:string:display mode的描q字W串
q个描述字符串用在创建顶U窗?子窗口和重叠层时,l将要被创徏的窗口或重叠层设|display mode.
q个字符串是?个或多个功能描述参数l成,每个功能描述参数用空格或tab键隔开.(若未l参数限制缓存精度大?则采用默认?

例如:
glutInitDisplayString("stencil~2 rgb double depth>=16 samples");
上例窗口初始化?位的模板~存,RGB模式alpha占用位数?,深度~存臛_?6?如果q_支持的话使用mutlisampling技?
可以使用的符h:
=   {号
!=  不等?br><   于?小好)
>   大于?大好)
<=  于{于(小好)
>=  大于{于(可能选择大的数?主要用于颜色~存或深度缓存等对位数要求高的参数设|?
~   大于{于(但尽可能选择的数?有效利用资源,主要用于模板~存{?
 
主要参数:
alpha : alpaha~存_ֺ, 默认?gt;=1,卛_于等??
acca  : red, green, blue, 和alpha累积~存_ֺ, 默认?gt;=1
acc  :  red, green, blue累积~存_ֺ, 默认?gt;=1,alpha累积~存_ֺ?;
blue :  blue颜色~存_ֺ, 默认?gt;=1;
buffer: 颜色索引~存_ֺ, 默认?gt;=1;
conformant :布尔?指示帧缓存配|是否一?该值基于GLX的EXT_visual_rationg扩展的支?若不支持,则默认ؓ一? 默认?1;
depth : 深度~存_ֺ, 默认?gt;=12;
double: 布尔?指示颜色~存是否是双倍缓? 默认?1;
green : green颜色~存_ֺ,默认?gt;=1;
index : 布尔?指示是否为颜色烦?true表示是颜色烦? 默认?gt;=1;
num  :  专用名词,指示数DC的Wn个~存配置与这个描q字W串相符合的地方,当没有指?则glutInitDisplayString也返回初?最佳符?配置.
red :   red颜色~存_ֺ, 默认?gt;=1;
rgba :  rgba模式,颜色~存_ֺ默认?gt;=1;
rgb :   rgb模式,颜色~存_ֺ默认?gt;=1,alpha_ֺ=0;
luminance: 讄red颜色~存_ֺ,默认?gt;=1,其他颜色~存_ֺ=0(alpha没有指定);
stencil: 模板~存_ֺ
single: 布尔?指示颜色~存是否为单~存, 默认?1;
stereo :布尔?标示颜色~存支持OpenGL的三l系l?默认?1;
samples: 标示multisamples的?q个值是ZGLX的SGIS_multisample的扩?默认?lt;=4.q个默认DC如果支持的话可以在glutInitDisplayString中添加描q参数让gluthmultipsampling;
slow :  布尔?标示帧缓存配|是否是slow?对于X11对glut的执?slow信息是基于GLX的EXT_visual_rating扩展的支?如果不支?p为是fast;对于win32对glut的执?slow是基于像素格式描q?pixel format Descriptor即PFD)被标Cؓ"generic"q且未被标记?accelerated",q说明Microsoft关于slow的OpenGL执行只用在PFD?q个参数的作用是帮助E序避免对于当前机器的~存配置来慢.默认?gt;=0,表示slow visuals优先于fast visuals,但fast visuals仍然被允?
win32pdf : 只在win32pȝ中识别glut的请?q个参数与win32中的像素格式(pixel format)相匹?它的值是个数?br>xvisual: 只在X Windowpȝ中识别glut的请?q个参数与X visual ID相匹?它的值是个数?br>xstaticgray:  只在X Windowpȝ中识别gluth,是个布尔?标示帧缓存配|的X visual是否是StaticGray. 默认?1
xgrayscale  : 只在X Windowpȝ中识别glut的请?是个布尔?标示帧缓存配|的X visual是否是GrayScale. 默认?1;
xstaticcolor:  只在X Windowpȝ中识别glut的请?是个布尔?标示帧缓存配|的X visual是否是StaticColor. 默认?1;
xpseudocolor : 只在X Windowpȝ中识别glut的请?是个布尔?标示帧缓存配|的X visual是否是PsuedoColor. 默认?1;
xtruecolor  :  只在X Windowpȝ中识别glut的请?是个布尔?标示帧缓存配|的X visual是否是TrueColor. 默认?1;
xdirectcolor : 只在X Windowpȝ中识别glut的请?是个布尔?标示帧缓存配|的X visual是否是DirectColor. 默认?1;
//*******************************************************************************************
|上没有搜到关于glut的完整资?于是下狠心自p旉整理了一?q里只是glut初始化的API,其中void glutInitDisplayString(const char *string);在国内网站上没搜到具体解?是从国外|站上翻译过来的,本h英文水^有限,可能有错?下面贴上英文原文,望达人指?(其他API 会在以后分类后陆l给?.
 
void glutInitDisplayString(const char *string)  - sets the initial display mode via a string.
string:Display mode description string, see below.
Description:
The initial display mode description string is
used  when creating top-level windows,subwindows,
and overlays to determine the OpenGL display mode
for the to-be-created window or overlay.
The string is a list of zero or more capability
descriptions separated by spaces and tabs.Each
capability description is a capability name that
is optionally followed by a comparator and a
numeric value.For example,"double" and "depth>=12"
are both valid criteria.
The capability descriptions are translated into
a set of criteria used to select the appropriate
frame buffer  configuration.
The criteria are matched in strict left to right
order of precdence.That is,the first specified
criteria(leftmost) takes precedence over the later
criteria for nonexact criteria (greater than,less
than,etc.comparators).Exact criteria (equal, not
equal compartors) must match exactly so precedence
is not relevant.
The numeric value is an integer that is parsed
according to ANSI C's strtol(str,strptr,0) behavior.
This means that decimal,octal(leading 0),and
hexidecimal values(leading 0x) are accepeted.
The valid compartors are:
=  Equal.
!= Not equal.
<  Less than and preferring larger difference
   (theleast is best).
>  Greater than and preferring larger differences
   (the most is best).
<= Less than or equal and preferring larger
   difference(the least is best).
>= Greater than or equal and preferring more
   instead of less. This comparator is useful for
   allocating resources like color precsion or
   depth buffer precision where the maximum
   precison is generally preferred.Contrast with
   the tilde (~) comprator.
~  Greater than or equal but preferring less
   instead of more.This compartor is useful for
   allocating resources such as stencil bits or
   auxillary color buffers where you would rather
   not over allocate.
   When the compartor and numeric value are not
   specified,each capability name has a different
   default(one default is to require a compartor
   and numeric value).
The valid capability names are:
alpha:Alpha color buffer precision in bits.Default
      is ">=1".
acca:Red,green,blue,and alpha accumulation buffer
     precision in bits.Default is ">=1" for red,
     green,blue,and alpha capabilities.
acc:Red,green,and green accumulation buffer
    precision in bits and zero bits of alpha
    accumulation buffer precision.Default is ">=1"
    for red,green,and blue capabilities,and "~0"
    for the alpha capability.
blue:Blue color buffer precision in bits.Default
     is ">=1".
buffer:Number of bits in the color index color
       buffer.Default is ">=1".
conformant:
       Boolean indicating if the frame buffer
       configuration is conformant or not.
       Conformance information is based on GLX's
       EXT_visual_rating extension if supported.
       If the extension is not supported,all
       visuals are assumed conformat.Default is
       "=1".
depth:Number of bits of precsion in the depth
      buffer.Default is ">=12".
double:Boolean indicating if the color buffer is
       double buffered.Default is "=1".
green:Green color buffer precision in bits.Default
      is ">=1".
index:Boolean if the color model is color index or
      not.True is color index.Default is ">=1".
num:A special capability name indicating where the
    value represents the Nth frame buffer
    configuration matching the description string.
    When  not specified,glutInitDisplayString also
    returns the first(best matching) configuration.
    num requires a compartor and numeric value.
red;Red color buffer precision in bits.Default is
        ">=1".
rgba:Number of bits of red,green,blue,and  alpha
     in the RGBA color buffer.Default is ">=1"
     for red,green,blue,and alpha capabilities,
     and "=1"  for the RGBA color model capability.
rgb:Number of bits of red,green,and blue in the
    RGBA color buffer and zero bits of alpha color
    buffer precision.Default  is ">=1" for the red,
    green,and blue capabilities,and "~0" for alpha
    capability,and "=1" for the RGBA color model
    capability.
luminance:
    Number of bits of red in the RGBA and zero
    bits of green,blue(alpha not specified) of
    color buffer precision.Default is ">=1"
    for the red capabilitis,and "=0" for the green
    and blue capabilities,and "=1" for the RGBA
    color model capability,and,for X11,"=1" for the
    StaticGray ("xstaticgray")capability.SGI
    InfiniteReality(and other future machines)
    support a 16-bit luminance (single channel)
    display mode(an additional 16-bit alpha channel
    can also be requested).The red channel maps to
    gray scale and green and blue channels are not
    available.A 16-bit precision luminance display
    mode is often appropriate for medical imaging
    applications.Do not expect many machines to
    support extended precision luminance display
    modes.
stencil:Number of bits in the stencil buffer.
single:Boolean indicate the color buffer is single
       buffered.Double buffer capability "=1".
stereo:Boolean indicating the color buffer is
       supports OpenGL-style stereo.Default is "=1".
samples:Indicates the number of multisamples to use
        based on GLX's SGIS_multisample extension(for
        antialiasing).Default is "<=4". This default
        means that a GLUT application can request
        multipsampling if available by simply
        specifying "samples".
slow:Boolean indicating if the frame buffer
     configuration is slow or not.For the X11
     implementation of GLUT,slowness information is
     based on GLX's EXT_visual_rating extension if
     supported.If the EXT_visual_rating extension is
     not supported,all visuals are assumed fast.For
     the Win32 implementation of GLUT,slowness is
     based on if the underlying Pixel Format Descriptor
     (PFD)is marked "generic" and not "accelerated".
     This implies that Microsoft's relatively slow
     software OpenGL implementation is used by this
     PFD.Note that slowness is a relative designation
     relative to other frame buffer configurations
     available.The intent of the slow capability is to
     help programs avoid frame buffer configurations
     that are slower(but perhaps higher precision) for
     the current machine.Default is ">=0" if not
     comparator and numeric value are provided.This
     default means that slow visuals are used in
     preference to fast visuals,but fast visuals will
     still be allowed.
win32pfd:
     Only recognized on GLUT implementations for Win32,
     this  capability name matches the Win32 Pixel For-
     mat Descriptor by numer.  win32pfd requires a com-
     partor and numeric value.
xvisual:Only recongized on GLUT implementations for the
        X Window System,this capability name matches
        the X visual ID by number.xvisual requires a
        compartor and numeric value.
xstaticgray:
        Only recongized on GLUT implementations for the
        X Window System,boolean indicating if the frame
        buffer configuration's X visual is of type Stat-
        icGray.Default is "=1".
xgrayscale:
        Only recongized on GLUT implementations for the
        X Window System,boolean indicating if the frame
        buffer configuration's X visual is of type
        GrayScale.Default is "=1".
xstaticcolor:
        Only recongized on GLUT implementations for the
        X Window System,boolean indicating if the frame
        buffer configuration's X visual is of type
        StaticColor.Default is "=1".
xpseudocolor:
        Only recongized on GLUT implementations for the
        X Window System,boolean indicating if the frame
        buffer configuration's X visual is of type
        PsuedoColor.Default is "=1".
xtruecolor:
        Only recongized on GLUT implementations for the
        X Window System,boolean indicating if the frame
        buffer configuration's X visual is of type
        TrueColor.Default is "=1".
xdirectcolor:
        Only recongized on GLUT implementations for the
        X Window System,boolean indicating if the frame
        buffer configuration's X visual is of type
        DirectColor.Default is "=1".
Unspecifed capability descriptions will result in
unspecified criteria being generated.These unspecified
criteria help glutInitDisplayString behave sensibly
with terse display mode description strings.For
example,if no "slow" capability description is provided,
fast frame buffer configurations will be choosen in
preference to slow frame buffer configurations,but slow
frame  buffer  configurations will still be choosen if
no better fast frame buffer configuration is available.
Example:
Here is an examples using glutInitDisplayString:
glutInitDisplayString("stencil~2 rgb double depth>=16 samples");
The above call requests a window with an RGBA color
model(but requesting no bits of alpha),a depth buffer
with at least 16 bits of precsion but preferring more,
mutlisampling if available,and at least 2 bits of
stencil(favoring less stencil to more as long as 2 bits
are available).


]]>
Q{Qglut中去掉控制台http://www.shnenglu.com/percyph/archive/2009/03/03/75412.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:10:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75412.htmlhttp://www.shnenglu.com/percyph/comments/75412.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75412.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75412.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75412.html*文章转自Q?a >http://old.blog.edu.cn/user3/zjdukang/archives/2007/1765297.shtml
    glut是OpenGL应用工具?OpenGL Utility Toolkit),它ؓOpenGL提供了一个简易的H口q_,使程序员不用q多的关心与q_相关的窗口系l?

    建立工程?我们一般都建立控制台程?在vc6中即console win32 application)来用glut?但是在控制台E序?q行旉会蟩出控制台H口,很不观,我们可以用下面的Ҏ控制台H口L:
#pragma comment( linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
在主函数所在的.cpp文g的顶部加上上面的?可以轻村ְ控制台窗口去?q样只剩下glutH口?



]]>
glut函数说明http://www.shnenglu.com/percyph/archive/2009/03/03/75411.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 07:02:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75411.htmlhttp://www.shnenglu.com/percyph/comments/75411.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75411.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75411.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75411.html阅读全文

]]>
VC下OpenGL配置以及glut配置http://www.shnenglu.com/percyph/archive/2009/03/03/75409.html虫?/dc:creator>虫?/author>Tue, 03 Mar 2009 06:57:00 GMThttp://www.shnenglu.com/percyph/archive/2009/03/03/75409.htmlhttp://www.shnenglu.com/percyph/comments/75409.htmlhttp://www.shnenglu.com/percyph/archive/2009/03/03/75409.html#Feedback0http://www.shnenglu.com/percyph/comments/commentRss/75409.htmlhttp://www.shnenglu.com/percyph/services/trackbacks/75409.htmlhttp://www.opengl.org

下面我将对Windows下的OpenGL~程q行单介l?

W一步:选择一个编译环?nbsp;  

现在Windowspȝ的主编译环境有Visual StudioQBroland C++ BuilderQDev-C++{,它们都是支持OpenGL的。但q里我们选择VC++ 6.0作ؓ学习OpenGL的环境?nbsp;  

W二步:安装GLUT工具?nbsp;  

GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便Q推荐安装?nbsp;  

Windows环境下的GLUT下蝲地址Q(大小Uؓ150kQ?nbsp;  
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip  

无法从以上地址下蝲的话请用下面的q接:   
http://upload.programfan.com/upfile/200607311626279.zip    

Windows环境下安装GLUT的步骤:   
1、将下蝲的压~包解开Q将得到5个文?
2、以我的安装目录ZQ?nbsp;  
Q?Q?#8220;d:\Program Files\Microsoft Visual Studio\VC98\include\GL文g?#8221;。把解压得到的glut.h攑ֈq个GL文g多w。没有GL文g夹可以自己徏一个,一般都有的?br>Q?Q?#8220;d:\Program Files\Microsoft Visual Studio\VC98\lib文g?#8221;。把解压得到的glut.lib和glut32.lib攑ֈ静态函数库所在文件夹Q即lib文g夏V?br>Q?Q把解压得到的glut.dll和glut32.dll攑ֈ操作pȝ目录下面的system32文g夹内。(典型的位|ؓQC:\Windows\System32Q这是非帔R要的动态链接库讄Q?nbsp;

W三步,创徏工程Q其步骤如下Q?/span>   

Q?Q创Z个Win32 Console Application。(以我创徏的ؓ例,工程名ؓsimpleGLQ?nbsp;  
Q?Q链接OpenGL libraries:在Visual C++中先单击ProjectQ再单击SettingsQ再扑ֈLink单击Q最后在Object/library modules 的最前面加上opengl32.lib Glut32.lib Glaux.lib glu32.lib ?nbsp;  
Q?Q单击Project Settings中的C/C++标签Q将Preprocessor definitions 中的_CONSOLE改ؓ__WINDOWS。最后单击OK?nbsp; 

现在Q准备工作基本上完成了,可不要轻视这一步,如果你没有设|好在编译及q行q程中M出错的?

对于VS2005可以如下讄Q?br>1、把 glut.h 复制?VC 安装路径下的 PlatFormSDK\include\gl 文g?br>2、把 glut32.lib 复制?VC 安装路径下的 PlatFormSDK\lib 文g?br>3、把 glut32.dll 复制?Windows\System32 文g?br>4、在 VC 中创建控制台应用E序Q在选项中清?#8220;使用预编译头”Q以免媄响可UL性)
5、在 VC 中打开目->属性对话框q行如下讄Q?br>        ?#8220;配置”下拉框选则?#8220;所有配|?#8221;
        打开 “链接?-输入”?br>        ?#8220;附加依赖?#8221;中增加:
        OpenGL32.lib
        glu32.lib
        glut32.lib

W四步,创徏一个最单的openglE序

#include <GL/glut.h>

void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
    glFlush();
}

int main(int argc, char *argv[])
{
   
glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(400, 400);
    glutCreateWindow("W一个OpenGLE序");
    glutDisplayFunc(&myDisplay);
    glutMainLoop();
    return 0;
}

该程序的作用是在一个黑色的H口中央M个白色的矩Ş。下面对各行语句q行说明?

首先Q需要包含头文g#include<GL/glut.h>Q这是GLUT的头文g?br>本来OpenGLE序一般还要包?lt;GL/gl.h>?lt;GL/glu.h>Q但GLUT的头文g中已l自动将q两个文件包含了Q不必再ơ包含?br>
然后看main函数?br>int main(int argc, char *argv[])Q这个是带命令行参数的main函数Q各位应该见q吧Q没见过的同志们请多ȝ书,{弄明白了再往下看?br>注意main函数中的各语句,除了最后的return之外Q其余全部以glut开头。这U以glut开头的函数都是GLUT工具包所提供的函敎ͼ下面对用到的几个函数q行介绍?br>1、glutInitQ对GLUTq行初始化,q个函数必须在其它的GLUT使用之前调用一ơ。其格式比较LQ一般照抄这句glutInit(&argc, argv)可以了?br>2、glutInitDisplayModeQ设|显C方式,其中GLUT_RGB表示使用RGB颜色Q与之对应的q有GLUT_INDEXQ表CZ用烦引颜Ԍ。GLUT_SINGLE表示使用单缓Ԍ与之对应的还有GLUT_DOUBLEQ用双~冲Q。更多信息,误己Google。当然以后的教程也会有一些讲解?br>3、glutInitWindowPositionQ这个简单,讄H口在屏q中的位|?br>4、glutInitWindowSizeQ这个也单,讄H口的大?br>5、glutCreateWindowQ根据前面设|的信息创徏H口。参数将被作为窗口的标题。注意:H口被创建后Qƈ不立xC到屏幕上。需要调用glutMainLoop才能看到H口?br>6、glutDisplayFuncQ设|一个函敎ͼ当需要进行画图时Q这个函数就会被调用。(q个说法不够准确Q但准确的说法可能初学者不太好理解Q暂时这栯吧)?br>7、glutMainLoopQ进行一个消息@环。(q个可能初学者也不太明白Q现在只需要知道这个函数可以显C窗口,q且{待H口关闭后才会返回,q就_了。)

在glutDisplayFunc函数中,我们讄?#8220;当需要画图时Q请调用myDisplay函数”。于是myDisplay函数q来画图。观?myDisplay中的三个函数调用Q发现它们都以gl开头。这U以gl开头的函数都是OpenGL的标准函敎ͼ下面对用到的函数q行介绍?br>1、glClearQ清除。GL_COLOR_BUFFER_BIT表示清除颜色QglClear函数q可以清除其它的东西Q但q里不作介绍?br>2、glRectfQ画一个矩形。四个参数分别表CZ位于对角U上的两个点的横、纵坐标?br>3、glFlushQ保证前面的OpenGL命o立即执行Q而不是让它们在缓冲区中等待)。其作用跟fflush(stdout)cM?


]]>
þԭavapp| ձvaҹĻþ| þ޾ƷAV| þer99ȾƷһ| þӰ㶮| ҹƵþþþһ| ޾þһ| 99þ˾ƷۺϹۿ| ɫԭһþۺ| þó˾ƷƵ| þþƷAVɫ | 鶹Ʒþһ| һþaþþƷۺҹҹ| ɫۺϾþ88ɫۺ | þù޾Ʒ鶹| ƷŮþøվ| Ʒþþþþþ| þþþAVۺ| ŷ˾þô߽ۺ| ۺϾþúݺɫ99h| ޾Ʒþþþϼ| þþƷŮAV| ƷŷƬþùŷ...| ˾þô߽AVɫɫ| þAV| 91龫Ʒ91þþþ| ݺɫݺݺݺݺɫۺϾþ | ޾Ʒtvþþþþþþ| þҹƵ| þۺϾɫۺϾ99| ξþ99Ʒþþþþ| 999þþùƷ| 91Ʒþþþþ| ձƷþþĻ| һþþƷ| Vþþ| ŷ츾XXXXԾþþ | ƷŮþþ| þþƷһ| 99þùۺϾƷԭ| ݺɫݺݺݺݺɫۺϾþ|