初始化
void glutInit( int argc, char* argv[] ) ;用于初始化 glut 程序,会处理一些相关的选项。
void glutInitWindowSize( int width, int height ) ; void glutInitWindowPosition( int x, int y ) ;初始化窗口的大小和位置。
void glutInitDisplayMode( unsigned int mode ) ;支持 GLUT_ 系模式,主要是设置颜色支持,打不打开各种 buffer;
事件处理
void glutMainLoop( void ) ;事件循环。
窗口管理
int glutCreateWindow( char* name ) ;创建窗口,返回窗口编号;
int glutCreateSubWindow( int win, int x, int y, int width, int height ) ;在给定窗口内,创建子窗口。
void glutSetWindow( int win ) ; int glutGetWindow( void ) ;选择或者获得当前(用于做图的)窗口;
void glutDestroyWindow( int win ) ;释放窗口;
void glutPostRedisplay( void ) ;要求重绘当前窗口;
void glutSwapBuffer( void ) ;如果当前窗口使用了 double buffering 就进行 buffer 交换;
void glutPositionWindow( int x, int y ) ;重新放置当前窗口;
void glutReshapeWindow( int width, int height ) ;改变当前窗口大小;
void glutFullScreen( void ) ;将当前窗口切换到全屏;
void glutFullScreen( void ) ;切换到全屏。
void glutPushWindow( void ) ; void glutPushWindow( void ) ;改变 window 堆积的顺序。
void glutShowWindow( void ) ; void glutHideWindow( void ) ; void glutIconifyWindow( void ) ;显示、隐藏与最小化窗口。
void glutSetWindowTitle( char* name ) ; void glutSetIconTitle( char* name ) ;设定窗口和图标的标题。
void glutSetCursor( int cursor ) ;设定鼠标形状;
overlay 管理
所谓的 overlay 指在 OpenGL 窗口上覆盖的另一个 OpenGL 绘制区域。
void glutEstablishOverlay( void ) ;在当前窗口上创建 overlay;
void glutUseOverlay( GLenum ) ;设定使用原始窗口(GL_NORMAL)还是 overlay(GL_OVERLAY);
void glutRemoveOverlay( void ) ;移除所创建的 overlay;
void glutPostOverlayRedisplay( void ) ;重绘 overlay。
void glutShowOverlay( void ) ; void glutHideOverlay( void ) ;现实或者隐藏 overlay;
菜单管理
int glutCreateMenu( void (*func)(int val) ) ;创建菜单,使用的 callback 函数在菜单被点击后会调用,传入的是所点的菜单项。返回菜单 id;
void glutSetMenu( int menu ) ; int glutGetMenu(void) ;设定 menu 以及获得使用的 menu 编号;
void glutDestroyMenu( void ) ;析构 menu 对象。
void glutAddMenuEntry( char* name, int value ) ; void glutAddSubMenu( char* name, int value ) ;添加(子)菜单项。
void glutChangeToMenuEntry( int entry, char* name, int index ) ; void glutChangeToSubMenuEntry( int entry, char* name, int index ) ;设定(子)菜单的新的索引值(传递给 callback 函数用的);
void glutRemoveMenuItem( int entry ) ;删掉菜单项。
void glutAttachMenu( int button ) ; void glutDetachMenu( int button ) ;将按钮关联到菜单。
注册 callback 函数
void glutDisplayFunc( void (*func)(void) ) ;用于绘制窗口的 callback 函数。一般会把所有的画图部分放在这个函数里面,通过几个参数控制最后的行为。
void glutOverlayDisplayFunc( void (*func)(void) ) ;设定 overlay 的绘图过程。
void glutReshapeFunc( void (*func)( int width, int height) ) ;设定窗口大小改变后的行为。
void glutKeyboardFunc( void (*func)(unsigned char key, int x, int y) ) ;设定响应键盘的 callback 函数。
void glutMouseFunc( void (*func)(int button, int state, int x, int y) ) ;设定响应鼠标的函数。
void glutMotionFunc( void (*func)(int x, int y) ) ; void glutPassiveMotionFunc( void (*func)(int x, int y) ) ;设定响应鼠标按下后行为与一般移动行为的 callback 函数。
void glutEntryFunc( void (*func)( int state) ) ;鼠标进入、退出窗口时触发;
void glutSpecialFunc( void (*func)(int key, int x, int y) ) ;响应特殊按键;
void glutSpaceballMotionFunc( void (*func)(int x, int y, int z) ) ; void glutSpaceballRotateFunc( void (*func)(int x, int y, int z) ) ; void glutSpaceballButtonFunc( void (*func)(int button, int state ) ) ;滚动球的移动、旋转和点击行为;
void glutButtonBoxFunc( void (*func)(int button, int state) ) ;点击按钮的行为;
void glutDialsFunc( void (*func)(int dial, int value) ) ;设置 dial 和 button 的行为。
void glutTabletMotionFunc( void (*func)( int x, int y) ) ; void glutTabletButtonFunc( void (*func)( int button, int state, int x, int y) ) ;设置响应平板操作的函数;
void glutMenuStatusFunc( void (*func)(int status, int x, int y) ) ; void glutMenuStateFunc( void (*func)(int status) ) ;设置菜单的行为;
void glutIdleFunc( void (*func)(void) ) ;如果无事可做就会被调用的 callback 函数;
void glutTimerFunc( unsigned int msecs, void (*func)(int value), int value ) ;设定计时器;
色彩索引管理
通过 glutGet( GLUT_WINDOW_COLORMAP_SIZE ) 可以获得可使用的 pallete 大小,之后可以用
void glutSetColor( int cell, GLfloat r, GLfloat g, GLfloat b ) ; GLfloat glutGetColor( int cell, int component ) ;设定或者获得每个调色板的颜色;
void glutCopyColormap( int win ) ;可以复制指定窗口的 colormap;
状态获得
可以用
void glutGet( GLenum state ) ;获得需要的状态;
void glutLayerGet( GLenum info ) ;获得当前 layer 的信息;
void glutDeviceGet( GLenum info ) ;获得设备相关信息;
void glutGetModifiers( void ) ;获得 shift、ctrl 和 alt 的状态;
void glutExtensionSupported( char* extentsion ) ;返回某些 OpenGL 扩展是否被支持;
字体支持
void glutBitmapCharacter( void* font, int chararacter ) ;字体中某个字符的 OpenGL 渲染;
int glutBitmapWidth( GLUTbitmapFont font, int chararacter ) ;返回字体宽度;
void glutStrokeCharacter( void* font, int chararacter ) ;使用轮廓字体;
int glutBitmapWidth( GLUTstrokeFont font, int chararacter ) ;返回轮廓字体宽度;
几何体的渲染
这也是我需要好生研究一下 src code 的部分。
void glutSolidSphere( GLdouble radius, GLint slices, GLint stacks ) ; void glutWireSphere( GLdouble radius, GLint slices, GLint stacks ) ;画球;
void glutSolidCube( GLdouble size ) ; void glutWireCube( GLdouble size ) ;画正方体;
void glutSolidCone( GLdouble base, GLdouble height, GLint slices, GLint stacks ) ; void glutWireCone( GLdouble base, GLdouble height, GLint slices, GLint stacks ) ;锥体,base 设定的是底面圆的半径;
void glutSolidTorus( GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings ) ; void glutWireTorus( GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings ) ;圆环;
void glutSolidDodecahedron( void ) ; void glutWireDodecahedron( void ) ;正 12 面体,每个面是五边形;
void glutSolidOctahedron( void ) ; void glutWireOctahedron( void ) ;正八面体,每个面是三角形;
void glutSolidTetrahedron( void ) ; void glutWireTetrahedron( void ) ;正四面体,每个面是三角形;
void glutSolidIcosahedron( void ) ; void glutWireIcosahedron( void ) ;二十面体;
void glutSolidTeapot( GLdouble size ) ; void glutWireTeapot( GLdouble size ) ;茶壶;
其他内容
其实 GLUT 的实现有很多免费的版本,如 freeglut,OpenGLUT。而 OpenGL 本身也有一个开源的实现,即 mesa,想看源代码,可能更多的应该是 GLU,毕竟 GLUT 提供的主要是窗口操作方面的东西。写轻量级的 OpenGL 程序比较合适。
No comments:
Post a Comment