计算机图形学-预告2
首先先声明,代码是来自www.cs.unm.edu/~angel。在下这里指示添加一些注释或者说明以及把里面的English翻译成Chinese。
下面的这些都是一些公共的工具文件以及方法。
初始化窗口
在C++代码中,main函数就是主要的入口
- glutInit(int *argc, char **argv);//这个就是main函数里面第一个需要调用的方法,打开一个窗口之前,窗口系统和OpenGL之间的交互就是通过这个函数调用来初始化。其参数是用来传递命令行参数,同main的参数一样。
- glutCreateWindow(char *tilte);//这个方法是初始化打开一个OpenGL窗口,
- glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);//这个方法可以在上一个方法创建窗口之前设置,设置显示模式为:RGB颜色、深度缓存、双缓冲。其取值可以如下(来自百度)
值 | 对应宏定义 | 意义 |
---|---|---|
GLUT_RGB | 0x0000 | 指定 RGB 颜色模式的窗口 |
GLUT_RGBA | 0x0000 | 指定 RGBA 颜色模式的窗口 |
GLUT_INDEX | 0x0001 | 指定颜色索引模式的窗口 |
GLUT_SINGLE | 0x0000 | 指定单缓存窗口 |
GLUT_DOUBLE | 0x0002 | 指定双缓存窗口 |
GLUT_ACCUM | 0x0004 | 窗口使用累加缓存 |
GLUT_ALPHA | 0x0008 | 窗口的颜色分量包含 alpha 值 |
GLUT_DEPTH | 0x0010 | 窗口使用深度缓存 |
GLUT_STENCIL | 0x0020 | 窗口使用模板缓存 |
GLUT_MULTISAMPLE | 0x0080 | 指定支持多样本功能的窗口 |
GLUT_STEREO | 0x0100 | 指定立体窗口 |
GLUT_LUMINANCE | 0x0200 | 窗口使用亮度颜色模型 |
- glutInitWindowSize( 512, 512 );//这个也是可以在创建窗口之前指定。还有glutInitWindowPosition( 0 , 0);
- glewInit(),glew的主要工作就是使用glewInit()函数导出所有显卡支持的函数。使得开发代码如下:
glewInit();
gl*(...);
- glutDisplayFunc(void (*func)(void)),显示回调函数,只有应用程序确定需要重新绘制的时候会调用。
- glutKeyboardFunc(void (*func)(unsigned char, int, int ),键盘响应回调函数。
- glutMouseFunc(void (*func)(int, int, int, int ),鼠标响应回调函数。
- glutMainLoop(),使程序进入一个事件处理循环。
大体框架
void init( void )
{
//数据初始化等
}
void display( void )
{
//绘制等
}
void keyboard( unsigned char key, int x, int y )
{
//键盘事件处理
}
int main( int argc, char **argv )
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGBA );
glutInitWindowSize( 512, 512 );
// If you are using freeglut, the next two lines will check if
// the code is truly 3.2. Otherwise, comment them out
glutInitContextVersion( 3, 2 );
glutInitContextProfile( GLUT_CORE_PROFILE );
glutCreateWindow( "窗口名称" );
//@{ add by juetion begin
//GLEW obtains information on the supported extensions from the graphics driver.
//Experimental or pre-release drivers, however, might not report every available
//extension through the standard mechanism, in which case GLEW will report it unsupported.
//To circumvent this situation, the [glewExperimental] global switch can be turned on by
//setting it to [GL_TRUE] before calling [glewInit()],
//which ensures that all extensions with valid entry points will be exposed.
glewExperimental = GL_TRUE;
//add by juetion end
//}@
//初始化glew扩展库
glewInit();
init();
glutDisplayFunc( display );
glutKeyboardFunc( keyboard );
glutMainLoop();
return 0;
}