`
stephenxjc
  • 浏览: 36555 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

GLUT常用函数介绍

阅读更多

GLUT常用函数介绍

 stephenxjc_千年一笑

2010-7-29

 

 

对象:GLUT的入门级(初学者)

关键字:GLUT、函数

核心内容:主要是通过在一个具体的程序中函数的作用

平台:visual studio2008,需要配置好OpenGL32.libGLu32.libGlAux.Libglut32.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编码,xy为鼠标的当前的位置。

 

对于组合键,可以通过glutGetModifiers(),获取按下当前的组合键,返回值如下:

意义

GLUT_ACTIVE_ALT

Alt被按下

GLUT_ACTIVE_CTRL

Ctrl被按下

GLUT_ACTIVE_SHIFT

ShiftCaps 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编写的茶壶示例

3
0
分享到:
评论

相关推荐

    glut常用函数库.pdf

    以下是对部分GLUT函数的详细解析,这些函数在《glut常用函数库.pdf》文档中均有提及,是OpenGL图形编程中的常用工具。 #### glAccum:操作累加缓冲区 `glAccum`函数用于对累加缓冲区进行各种操作,如累加、取反等。...

    glut 函数详解 txt版本的

    ### Glut函数详解 #### 一、`glutDisplayFunc` `glutDisplayFunc`用于设置OpenGL场景的绘制回调函数。...以上就是对常用`glut`函数的详细介绍,通过这些函数,我们可以方便地实现各种图形界面交互功能。

    OpenGL中常用的GLUT函数库.pdf

    ### OpenGL中常用的GLUT函数库知识点详解 ...以上就是OpenGL中常用的GLUT函数库的基本知识点介绍。这些函数为OpenGL应用程序的开发提供了极大的便利,使得开发者能够更加专注于图形渲染逻辑的编写。

    GLUT工具包下载,内含glut.dll、glut.h、glut.lib、glut32.dll、glut32.lib五个文件

    GLUT,全称为“OpenGL Utility Toolkit”,是OpenGL编程中常用的一个开源库,由Mark Kilgard在SGI公司开发。这个工具包为开发者提供了一系列的基本功能,使得他们能够更方便地创建交互式的三维图形应用程序,而无需...

    图形函数库glut

    GLUT,全称为“OpenGL Utility Toolkit”,是OpenGL编程中一个常用的辅助库。它为开发者提供了创建和管理窗口、处理用户输入、管理图形显示模式等功能,使得开发人员能够专注于图形算法的实现,而无需关心底层操作...

    GLUT库(glut.h、glut32.dll、glut32.lib)

    GLUT库,全称为“OpenGL Utility Toolkit”,是OpenGL编程中常用的一个开源库,主要用于创建和管理窗口、处理用户输入以及创建基本的三维图形。在Windows系统中,它通常包括`glut.h`头文件、`glut32.dll`动态链接库...

    OpenGL常用函数自己整理滴

    ### OpenGL常用函数详解 #### 一、色彩与透明度设置 **函数名:** `glClearColor` **功能:** 设置清除颜色缓冲时的颜色值。这四个参数分别对应红、绿、蓝、透明度分量。 **语法:** ```c void glClearColor...

    OpenGL常用库函数以及函数大全

    ### OpenGL常用库函数详解 #### 一、初始化 在OpenGL应用程序开发中,初始化阶段是非常重要的第一步,这一步决定了后续操作的基础环境。 ##### **1.1 glutInit** ```cpp void glutInit(int* argc, char** argv);...

    glut最新版本支持鼠标滚轴

    但GLUT的简单性和跨平台性使其仍然是教学和快速原型设计的常用选择。 在使用GLUT最新版本时,请确保你已经正确安装了包含滚轮支持的库,并且查阅官方文档或社区资源获取最新的API信息和示例代码,以便更好地利用这...

    glut各种所需文件

    在进行OpenGL编程时,GLUT是一个非常常用的工具,因为它简化了设置和交互过程。 标题"glut各种所需文件"表明这是一个包含GLUT库所需的各种组件的压缩包,这些组件对于在你的开发环境中正确配置和使用GLUT至关重要。...

    【OpenGl开发常用】GLUT库

    在OpenGL的开发过程中,GLUT(OpenGL Utility Toolkit)库扮演了重要的角色,尤其对于初学者来说,它提供了一组易于使用的函数,使得搭建图形窗口、处理用户输入和管理图形渲染流程变得更加简单。 GLUT库是OpenGL...

    GLUT3.7 源码+预编译libdll文件 分流

    GLUT,全称为“OpenGL Utility Toolkit”,是OpenGL编程中常用的一个开源库,主要用来创建窗口、处理用户输入以及管理基本的图形输出。GLUT 3.7是该库的一个版本,包含了源码和预编译的libdll文件,这对于开发者来说...

    glut3.7.6源代码

    GLUT,全称为“OpenGL Utility Toolkit”,是OpenGL编程中常用的一个跨平台的窗口系统独立工具包。它提供了创建和管理窗口、处理用户输入、以及定时器等功能,为开发者简化了与操作系统交互的复杂性,使得程序员可以...

    GLUT写的简单例子

    GLUT(OpenGL Utility Toolkit)是OpenGL编程中一个常用的库,主要用于创建和管理窗口以及处理用户输入。这个"GLUT写的简单例子"是一个针对初学者的教程,旨在帮助他们理解和掌握如何使用GLUT来构建基本的OpenGL应用...

    GLUT C++开发框架

    在C++环境中,GLUT框架是一个常用的选择,因为它简化了设置和交互过程,使得开发者可以更加专注于图形编程的核心部分。 在"GLUT C++开发框架"中,`G_Window.cpp`和`G_Window.h`文件可能包含了对GLUT窗口管理的类...

    glut库头文件的下载

    GLUT,全称为“OpenGL Utility Toolkit”,是OpenGL编程中常用的一个跨平台的工具包,它为开发者提供了创建和管理窗口、处理用户输入以及创建基本3D图形的功能。在没有GLUT的情况下,程序员需要自己实现这些功能,而...

    glut source

    GLUT,全称为“OpenGL Utility Toolkit”,是OpenGL编程中常用的一个库,主要用于创建窗口、处理图形用户界面(GUI)事件,如键盘输入、鼠标点击等。这个“glut source”压缩包包含的是GLUT库的源代码,允许开发者对...

    glut库及配置方法

    GLUT,全称OpenGL Utility Toolkit,是OpenGL编程中一个常用的库,由Mark Kilgard开发,主要用于创建和管理窗口、处理用户输入、定时器等功能,为开发者提供了一个简单易用的接口来实现交互式3D图形应用程序。GLUT库...

Global site tag (gtag.js) - Google Analytics