GLUT常用函数介绍
2011-04-28 15:54
204 查看
对象:GLUT的入门级(初学者)
关键字:GLUT、函数
核心内容:主要是通过在一个具体的程序中函数的作用
平台:visual studio2008,需要配置好OpenGL32.lib、GLu32.lib、GlAux.Lib、glut32.lib和相应的dll文件。
正文
以上主函数里包含了常用的glut中的函数。其中,glutInit(),glutInitWindowPosition(),glutInitWindowSize(),glutCreateWindow()等函数比较简单,程序中的介绍已经足够。下面重点介绍其它函数。
其中,key为返回的按键的ASCII编码,x和y为鼠标的当前的位置。
对于组合键,可以通过glutGetModifiers(),获取按下当前的组合键,返回值如下:
注意:对于组合键,glut不支持多个组合键。如Ctrl+Alt+t并不会响应
GLUT_KEY_F1,GLUT_KEY_F2,GLUT_KEY_F3,GLUT_KEY_F4,GLUT_KEY_F5,GLUT_KEY_F6,GLUT_KEY_F7,
GLUT_KEY_F8,GLUT_KEY_F9,GLUT_KEY_F10,GLUT_KEY_F11,GLUT_KEY_F12,GLUT_KEY_LEFT,
GLUT_KEY_UP,GLUT_KEY_RIGHT,GLUT_KEY_DOWN,GLUT_KEY_PAGE_UP,GLUT_KEY_PAGE_DOWN,
GLUT_KEY_HOME,GLUT_KEY_END,GLUT_KEY_INSERT。函数结构与glutKeyBoardFunc相同。
参数意义如下:
在鼠标拖动过程中,与前一刻的鼠标坐标相比较,就可以比较快得到鼠标的运动情况(如鼠标的运动方向)
这里只给出一个示例:
原作者:stephenxjc_千年一笑
转自:http://stephenxjc.iteye.com/blog/724745
关键字:GLUT、函数
核心内容:主要是通过在一个具体的程序中函数的作用
平台:visual studio2008,需要配置好OpenGL32.lib、GLu32.lib、GlAux.Lib、glut32.lib和相应的dll文件。
正文
1 示例
简单的一个主函数:#include <windows.h> #include <GL/glut.h> #include <gl/glaux.h> #include <stdlib.h> #include <stdio.h> #include <math.h> /************************************************************************/ /* 主函数 */ /************************************************************************/ int main(int argc,char** argv) { /******************* 初始化窗口**************************************/ //初始化glut库,如果失败,程序退出 glutInit(&argc,argv); //初始化显示模式,这里声明采用双缓存并采用RGB的颜色模式 glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); //初始化窗口的位置,以左上角为原点、向左为x轴正方向,向下为y轴方向 glutInitWindowPosition(50,100); //创建一个大小为*640(像素)的窗口 glutInitWindowSize(640,640); //创建一个窗口,并设定窗口的标题为“An Example of OpenGL Program” glutCreateWindow("An Example of OpenGL Program"); //用于初始化的一个函数,主要是对opengl中的一些参数进行设定 init(); /*********************设定响应函数********************************/ //设定键盘响应函数 glutKeyboardFunc(pressKeyboard); //设定特殊的键盘响应函数 glutSpecialFunc(specialKey); //设定鼠标点击响应函数 glutMouseFunc(pickTarget); //设定鼠标移动响应函数 glutMotionFunc(mouseMotion); //显示输出函数。主要是opengl的绘制 glutDisplayFunc(display); //调整窗口大小变化时的响应函数 glutReshapeFunc(reshape); /*********************循环等待********************************/ //进入循环,等待输入,触发相应的响应 glutMainLoop(); return 0; } |
2 glutInitDisplayMode()
初始化显示模式。这里主要采用RGB模式显示,并采用双缓存模式。双缓存模式相对的是单缓存,双缓存是现在后台缓存绘制,在绘制完成后,将后台与前台缓存交换,后台变前台,前台变后台,达到快速输出的效果。而单缓存,在绘制时就在唯一缓存中绘制,当绘制时间比较长时,会使屏幕比较卡。3 glutKeyBoardFunc(pressKeyboard)
设定键盘响应函数为pressKeyboard,函数的结构为:/************************************************************************/ /* 按键响应 */ /************************************************************************/ void pressKeyboard(unsigned char key, int x,int y){ switch(key){ case 'r'://按键'r',经角度增加度。 spin = (spin+30)%360; break; case 't'://按键't',修改textureNum的值 //采用组合键Alt if (glutGetModifiers()==GLUT_ACTIVE_ALT) { textureNum+=2; if (textureNum>=6) { textureNum=0; } break; } else{ textureNum-=2; if (textureNum<0) { textureNum=4; } break; } default: break; } //刷新屏幕 glutPostRedisplay(); } |
对于组合键,可以通过glutGetModifiers(),获取按下当前的组合键,返回值如下:
值 | 意义 |
GLUT_ACTIVE_ALT | Alt被按下 |
GLUT_ACTIVE_CTRL | Ctrl被按下 |
GLUT_ACTIVE_SHIFT | Shift或Caps Lock被按下 |
4 glutSpecialFunc(specialKey)
实际也是针对按键响应,但与glutKeyBoardFunc相比,前者针对的是一些特殊的按键。包括:GLUT_KEY_F1,GLUT_KEY_F2,GLUT_KEY_F3,GLUT_KEY_F4,GLUT_KEY_F5,GLUT_KEY_F6,GLUT_KEY_F7,
GLUT_KEY_F8,GLUT_KEY_F9,GLUT_KEY_F10,GLUT_KEY_F11,GLUT_KEY_F12,GLUT_KEY_LEFT,
GLUT_KEY_UP,GLUT_KEY_RIGHT,GLUT_KEY_DOWN,GLUT_KEY_PAGE_UP,GLUT_KEY_PAGE_DOWN,
GLUT_KEY_HOME,GLUT_KEY_END,GLUT_KEY_INSERT。函数结构与glutKeyBoardFunc相同。
5 glutMouseFunc(pickTarget)
鼠标点击响应。pickTarget函数结构如下:/************************************************************************/ /* 鼠标点击,选择物体 */ /************************************************************************/ void pickTarget(int button, int state,int x,int y) { switch (button) { case GLUT_LEFT_BUTTON: if (state == GLUT_DOWN) { //左键单击响应 } else { } break; case GLUT_RIGHT_BUTTON: break; default: break } glutPostRedisplay(); } |
参数 | 意义 |
x,y | 鼠标的屏幕位置 |
button | GLUT_LEFT_BUTTON鼠标左键 GLUT_RIGHT_BUTTON鼠标右键 GLUT_MIDDLE_BUTTON鼠标的滚轮键 |
state | GLUT_DOWN鼠标键按下 GLUT_UP鼠标键抬起 |
6 glutMotionFunc(mouseMotion)
按住鼠标移动。mouseMotion的函数结构如下:void mouseMotion(int x,int y){}。xy为鼠标的屏幕坐标。在鼠标拖动过程中,与前一刻的鼠标坐标相比较,就可以比较快得到鼠标的运动情况(如鼠标的运动方向)
7 glutDisplayFunc(display)
display主要是显示输出函数,需要与opengl结合,这里不仔细讲,可以参看opengl的一些绘制函数示例。这里给出一个示例,结构如下:/************************************************************************/ /* 输出显示 */ /************************************************************************/ void display(void) { //将缓存清空,以便绘制新的图像,类似清屏操作 glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); //修改为模型矩阵,并将 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //绘制物体 drawTargets(GL_RENDER); //利用双缓存,执行绘制 glutSwapBuffers(); } |
8 glutReshapeFunc(reshape)
对于窗口调整时,需要进行的操作。通常在opengl里,需要进行一些投影变换和视口变换。这里对于具体什么事投影变换和视口变换不介绍,可以查看《opengl编程指南》这本书。这里只给出一个示例:
/************************************************************************/ /* 大小调整时,修改视野和投影 */ /************************************************************************/ void reshape(int w,int h) { //设定视口变换 glViewport(0, 0, (GLsizei) w, (GLsizei) h); //矩阵模式设为投影,并设定视野范围 glMatrixMode(GL_PROJECTION);//GL_TEXTURE GL_MODELVIEW glLoadIdentity(); glOrtho(-8,8,-8,8,0,100); //将模式修改为模型矩阵 glMatrixMode(GL_MODELVIEW); } |
9 glutMainLoop()
在程序中调用一次,使程序能够进入循环,等待输入。10 glutPostRedisplay()
通常,有外界输入,为了使屏幕能够有相应的响应变化,需要调用该函数,重新绘制,显示输出。原作者:stephenxjc_千年一笑
转自:http://stephenxjc.iteye.com/blog/724745
相关文章推荐
- CUDA常用函数介绍
- objective c常用函数介绍
- SQL SERVER系统表和常用函数介绍
- ORACLE常用数值函数、转换函数、字符串函数介绍
- MFC中常用类,宏,函数介绍
- Delphi 变体类型(Variant)的介绍(流与变体类型的相互转换、变体类型常用的函数) .
- EXCEL常用函数介绍(2)
- glut常用的函数
- 树莓派wiringPi常用的函数介绍
- MFC常用函数介绍
- ORACLE常用数值函数、转换函数、字符串函数介绍
- vc中显示bmp常用的几个函数介绍
- js中函数调用的两种常用方法使用介绍
- C语言string.h中常用字符函数介绍
- Excel常用函数公式介绍
- OpenGL中常用的 GLUT 函数
- oracle常用函数介绍
- C语言string.h中常用字符函数介绍
- STL vector用法介绍+ STL 常用函数用法
- Makefile之常用函数介绍