GLUT常用函数介绍
stephenxjc_千年一笑
2010-7-29
对象:GLUT的入门级(初学者)
关键字: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;
}
|
以上主函数里包含了常用的glut中的函数。其中,glutInit(),glutInitWindowPosition(),glutInitWindowSize() ,glutCreateWindow()等函数比较简单,程序中的介绍已经足够。下面重点介绍其它函数。
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();
}
|
其中,key为返回的按键的ASCII编码,x和y为鼠标的当前的位置。
对于组合键,可以通过glutGetModifiers(),获取按下当前的组合键,返回值如下:
值
|
意义
|
GLUT_ACTIVE_ALT
|
Alt被按下
|
GLUT_ACTIVE_CTRL
|
Ctrl被按下
|
GLUT_ACTIVE_SHIFT
|
Shift或Caps Lock被按下
|
注意:对于组合键,glut不支持多个组合键。如Ctrl+Alt+t并不会响应
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()
通常,有外界输入,为了使屏幕能够有相应的响应变化,需要调用该函数,重新绘制,显示输出。
附件当中是文章的docx版本,并附上利用glut和opengl编写的茶壶示例
分享到:
相关推荐
以下是对部分GLUT函数的详细解析,这些函数在《glut常用函数库.pdf》文档中均有提及,是OpenGL图形编程中的常用工具。 #### glAccum:操作累加缓冲区 `glAccum`函数用于对累加缓冲区进行各种操作,如累加、取反等。...
### Glut函数详解 #### 一、`glutDisplayFunc` `glutDisplayFunc`用于设置OpenGL场景的绘制回调函数。...以上就是对常用`glut`函数的详细介绍,通过这些函数,我们可以方便地实现各种图形界面交互功能。
### OpenGL中常用的GLUT函数库知识点详解 ...以上就是OpenGL中常用的GLUT函数库的基本知识点介绍。这些函数为OpenGL应用程序的开发提供了极大的便利,使得开发者能够更加专注于图形渲染逻辑的编写。
GLUT,全称为“OpenGL Utility Toolkit”,是OpenGL编程中常用的一个开源库,由Mark Kilgard在SGI公司开发。这个工具包为开发者提供了一系列的基本功能,使得他们能够更方便地创建交互式的三维图形应用程序,而无需...
GLUT,全称为“OpenGL Utility Toolkit”,是OpenGL编程中一个常用的辅助库。它为开发者提供了创建和管理窗口、处理用户输入、管理图形显示模式等功能,使得开发人员能够专注于图形算法的实现,而无需关心底层操作...
GLUT库,全称为“OpenGL Utility Toolkit”,是OpenGL编程中常用的一个开源库,主要用于创建和管理窗口、处理用户输入以及创建基本的三维图形。在Windows系统中,它通常包括`glut.h`头文件、`glut32.dll`动态链接库...
### OpenGL常用函数详解 #### 一、色彩与透明度设置 **函数名:** `glClearColor` **功能:** 设置清除颜色缓冲时的颜色值。这四个参数分别对应红、绿、蓝、透明度分量。 **语法:** ```c void glClearColor...
### OpenGL常用库函数详解 #### 一、初始化 在OpenGL应用程序开发中,初始化阶段是非常重要的第一步,这一步决定了后续操作的基础环境。 ##### **1.1 glutInit** ```cpp void glutInit(int* argc, char** argv);...
但GLUT的简单性和跨平台性使其仍然是教学和快速原型设计的常用选择。 在使用GLUT最新版本时,请确保你已经正确安装了包含滚轮支持的库,并且查阅官方文档或社区资源获取最新的API信息和示例代码,以便更好地利用这...
在进行OpenGL编程时,GLUT是一个非常常用的工具,因为它简化了设置和交互过程。 标题"glut各种所需文件"表明这是一个包含GLUT库所需的各种组件的压缩包,这些组件对于在你的开发环境中正确配置和使用GLUT至关重要。...
在OpenGL的开发过程中,GLUT(OpenGL Utility Toolkit)库扮演了重要的角色,尤其对于初学者来说,它提供了一组易于使用的函数,使得搭建图形窗口、处理用户输入和管理图形渲染流程变得更加简单。 GLUT库是OpenGL...
GLUT,全称为“OpenGL Utility Toolkit”,是OpenGL编程中常用的一个开源库,主要用来创建窗口、处理用户输入以及管理基本的图形输出。GLUT 3.7是该库的一个版本,包含了源码和预编译的libdll文件,这对于开发者来说...
GLUT,全称为“OpenGL Utility Toolkit”,是OpenGL编程中常用的一个跨平台的窗口系统独立工具包。它提供了创建和管理窗口、处理用户输入、以及定时器等功能,为开发者简化了与操作系统交互的复杂性,使得程序员可以...
GLUT(OpenGL Utility Toolkit)是OpenGL编程中一个常用的库,主要用于创建和管理窗口以及处理用户输入。这个"GLUT写的简单例子"是一个针对初学者的教程,旨在帮助他们理解和掌握如何使用GLUT来构建基本的OpenGL应用...
在C++环境中,GLUT框架是一个常用的选择,因为它简化了设置和交互过程,使得开发者可以更加专注于图形编程的核心部分。 在"GLUT C++开发框架"中,`G_Window.cpp`和`G_Window.h`文件可能包含了对GLUT窗口管理的类...
GLUT,全称为“OpenGL Utility Toolkit”,是OpenGL编程中常用的一个跨平台的工具包,它为开发者提供了创建和管理窗口、处理用户输入以及创建基本3D图形的功能。在没有GLUT的情况下,程序员需要自己实现这些功能,而...
GLUT,全称为“OpenGL Utility Toolkit”,是OpenGL编程中常用的一个库,主要用于创建窗口、处理图形用户界面(GUI)事件,如键盘输入、鼠标点击等。这个“glut source”压缩包包含的是GLUT库的源代码,允许开发者对...
GLUT,全称OpenGL Utility Toolkit,是OpenGL编程中一个常用的库,由Mark Kilgard开发,主要用于创建和管理窗口、处理用户输入、定时器等功能,为开发者提供了一个简单易用的接口来实现交互式3D图形应用程序。GLUT库...