OpenGL学习--glut库中的主要函数
- 格式:doc
- 大小:19.00 KB
- 文档页数:3
OpenGL是一个非常优秀的图形软件接口。
OpenGL官方网站(英文)/下面将对Windows下的OpenGL编程进行简单介绍。
1.安装GLUT工具包GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。
Windows环境下的GLUT本地下载地址:glut-install.zip(大小约为150k)也可直接去官方网站下载:/resources/libraries/glut/glutdlls37beta.zipWindows环境下安装GLUT的步骤:1)将下载的压缩包解压,得到5个文件放到以下三个指定位置:2)glut.h放到GL文件夹(VC6中一般是:C:\Program Files\Microsoft VisualStudio\VC98\Include\GL,VC2005中是:C:\Program Files\Microsoft Visual Studio 8\VC\Include,新建GL文件夹,再将glut.h放到GL文件夹中)。
3)glut.lib和glut32.lib放到静态函数库所在文件夹(VC6中一般是:C:\ProgramFiles\Microsoft Visual Studio\VC98\Lib, VC2005中是:C:\Program Files\Microsoft Visual Studio 8\VC\Lib)。
4)glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。
(典型的位置为:C:\Windows\System32,有些机器可能为C:\WINNT\System32)2.建立一个OpenGL工程这里以VC为例:首先从开始->所有程序->Microsoft Visual C++ 6.0菜单中打开VC,也可单击文件:C:\Program Files\Microsoft Visual Studio\VisualC++6\Common\MSDev98\Bin\msdev.exe打开VC,在VC中选择File->New->Project,然后选择Win32 Console Application,输入一个工程名,设为Pixel,然后按OK。
glew,glee与gl,glu,glut,glx,glext的区别和关系GLEW是⼀个跨平台的C++扩展库,基于OpenGL图形接⼝。
使⽤OpenGL的朋友都知道,window⽬前只⽀持OpenGL1.1的涵数,但OpenGL现在都发展到2.0以上了,要使⽤这些OpenGL的⾼级特性,就必须下载最新的扩展,另外,不同的显卡公司,也会发布⼀些只有⾃家显卡才⽀持的扩展函数,你要想⽤这数涵数,不得不去寻找最新的glext.h,有了GLEW扩展库,你就再也不⽤为找不到函数的接⼝⽽烦恼,因为GLEW能⾃动识别你的平台所⽀持的全部OpenGL⾼级扩展涵数。
也就是说,只要包含⼀个glew.h头⽂件,你就能使⽤gl,glu,glext,wgl,glx的全部函数。
GLEW⽀持⽬前流⾏的各种操作系统(including Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris)。
glu是实⽤库,包含有43个函数,函数名的前缀为glu。
Glu 为了减轻繁重的编程⼯作,封装了OpenGL函数,Glu函数通过调⽤核⼼库的函数,为开发者提供相对简单的⽤法,实现⼀些较为复杂的操作。
glaux是OpenGL辅助库,包含有31个函数,函数名前缀为aux。
这部分函数提供窗⼝管理、输⼊输出处理以及绘制⼀些简单三维物体。
glut是实⽤⼯具库,基本上是⽤于做窗⼝界⾯的,并且是跨平台(所以有时你喜欢做简单的demo的话,可以光⽤glut就ok了)GLX:OpenGL extension for X.对于X窗⼝系统,它所使⽤的的OpenGL扩展(GLX)是作为OpenGL的⼀个附件提供的,所有的GLX函数都使⽤前缀glX。
常见的OpenGL头⽂件如下:(Windows系统中可以忽略⼤⼩写的区别,我⾃⼰也没太注意⼤⼩写。
同时,⽂件的路径可能变化,例如不是<GL/gl.h>⽽是"gl.h",具体情况要看你到底把头⽂件放到哪了)<GL/gl.h>:OpenGL所使⽤的函数和常量声明。
OpenGL代码学习(5)--2D图形上下左右移动注意:需要在配置好OpenGL的编程环境中运⾏下列代码,环境配置⽂章可参考:下⾯的代码,直接放置在main.cpp⽂件中即可:#pragma mark - 基本概念/*GLUT全名OpenGL Uitility Tools,⼀种跨平台(Windows、Mac、Linux)的GUI编程框架,⽤于辅助OpenGL显⽰GUI界⾯。
GLEW⼀种维护最好的开源OpenGL扩展加载库(⾃动初始化所有函数指针并包含所需类型定义、常量和枚举值),GLEW被预先封装在了GLTools库中。
GLToolsOpenGL快捷开发⼯具,包含⼀个⽤于操作矩阵和向量的3D数学库,⼀些产⽣和渲染简单的3D对象的函数,以及对视觉平截头体、相机类和变换矩阵进⾏管理的函数的充分⽀持。
OpenGL数据类型为了OpenGL的移植性,OpenGL定义了各种数据类型,这些数据类型可以映射到所有平台上的特定最⼩格式。
*/#pragma mark - 代码解析#include <iostream>#include "GLShaderManager.h"#include "GLTools.h"#include <glut/glut.h>GLBatch squareBatch;GLShaderManager shaderManager;/// glew// 构建四边形顶点数组,vVert包含4个顶点的(x,y,z)笛卡尔坐标GLfloat blockSize = 0.2f;//半边长GLfloat vVerts[12];// 2 为程序做⼀次性的设置void SetupRC() {/// glew// 设置背景颜⾊glClearColor(0.0f, 0.0f, 1.0f, 1.0f);/// include-GLShaderManager// 初始化着⾊管理器shaderManager.InitializeStockShaders();GLfloat blockX = -blockSize;GLfloat blockY = -blockSize;// 左下⾓vVerts[0] = blockX;vVerts[1] = blockY;vVerts[2] = 0.0f;// 右下⾓vVerts[3] = blockX + blockSize * 2;vVerts[4] = blockY;vVerts[5] = 0.0f;// 右上⾓vVerts[6] = blockX + blockSize * 2;vVerts[7] = blockY + blockSize * 2;vVerts[8] = 0.0f;// 左上⾓vVerts[9] = blockX;vVerts[10] = blockY + blockSize * 2;vVerts[11] = 0.0f;/// include-GLBatch/*GL_POINTS: 点GL_LINES: 线GL_LINE_STRIP: 条带线GL_LINE_LOOP: 循环线GL_TRIANGLES: 独⽴三⾓形GL_TRIANGLE_STRIP: 三⾓形条带GL_TRIANGLE_FAN: 三⾓形扇⾯*/// 开始构建批次,GL_TRIANGLE_FAN表⽰四边形,后⾯参数是顶点数squareBatch.Begin(GL_TRIANGLE_FAN, 4);glPointSize(9.f);glLineWidth(5.f);glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);/*批次增加存储属性CopyVertexData3f(XYZ顶点数据)CopyNormalDataf(表⾯法线)CopyColorData4f(RGBA颜⾊)CopyTexCoordData2f(纹理坐标)*/// 批次增加存储属性,顶点数据squareBatch.CopyVertexData3f(vVerts);// 结束批次属性设置,表明完成数据复制操作,不能再添加新属性squareBatch.End();}// 3 窗⼝⼤⼩改变时接受新的宽度和⾼度void ChangeSize(int w, int h) {/// glew// 设置视⼝,(x, y, w, h),其中x,y代表窗⼝中视⼝的左下⾓坐标glViewport(0, 0, w, h);}// 4 开始渲染void RenderScene(void) {/// glew// 清楚⼀个或⼀组特定的缓冲区glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);/// glew// 设置⼀组浮点数表⽰红⾊GLfloat vRed[] = {1.0f, 0.0f, 0.0f, 1.0f};/// include-GLShaderManager// 传递到存储着⾊器,即GLT_SHADER_IDENTITY着⾊器,这个着⾊器只是使⽤指定颜⾊以默认笛卡尔坐标系在屏幕上渲染⼏何图形 // 利⽤单位着⾊器设置矩形颜⾊为红⾊eStockShader(GLT_SHADER_IDENTITY, vRed);/// include-GLBatch// 根据批次⾥的顶点数据利⽤当前设置的着⾊器进⾏画图squareBatch.Draw();/// GLUT/*当glutInitDisplayMode有传⼊双缓冲模式时,将在后台缓冲区进⾏渲染,然后在结束时交换到前台为了防⽌观察者看到可能随着动画帧和动画帧之间闪烁的渲染过程*/glutSwapBuffers();}void BourceFunction(int key) {// 每次按键的矩形移动距离GLfloat stepSize = 0.025f;// 左下⾓坐标的(x,y)GLfloat blockX = vVerts[0];GLfloat blockY = vVerts[1];// 判断键盘点击的是哪个按钮,计算下⼀个点的位置if (key == GLUT_KEY_UP) {blockY += stepSize;}if (key == GLUT_KEY_DOWN) {blockY -= stepSize;}if (key == GLUT_KEY_LEFT) {blockX -= stepSize;}if (key == GLUT_KEY_RIGHT) {blockX += stepSize;}// 边界检测,让矩形没法超出边界if (blockY > (1.0f - blockSize * 2)) {blockY = 1.0f - blockSize * 2;}if (blockY < -1.0f) {blockY = -1.0f;}if (blockX < -1.0f) {blockX = -1.0f;}if (blockX > (1.0f - blockSize * 2)) {blockX = 1.0f - blockSize * 2;}// 设置下个位置的4个顶点坐标// 左下⾓vVerts[0] = blockX;vVerts[1] = blockY;// 右下⾓vVerts[3] = blockX + blockSize * 2;vVerts[4] = blockY;// 右上⾓vVerts[6] = blockX + blockSize * 2;vVerts[7] = blockY + blockSize * 2;// 左上⾓vVerts[9] = blockX;vVerts[10] = blockY + blockSize * 2;// 批次更新存储属性,顶点数据squareBatch.CopyVertexData3f(vVerts);}/*参数key表⽰按键的唯⼀标识,(x,y)是发⽣按键事件时⿏标点所处位置(以左上⾓为起点)上下左右箭头按键分别对应的key值为:GLUT_KEY_UP、GLUT_KEY_DOWN、GLUT_KEY_LEFT、GLUT_KEY_RIGHT*/void SpecialKeys(GLint key, GLint x, GLint y) {///(⾃定义函数)// 计算下⼀个矩形位置BourceFunction(key);/// GLUT// 触发重画事件 RenderSceneglutPostRedisplay();}// 1 程序⼊⼝int main(int argc, char *argv[]) {/// GLTools// 设置当前⼯作⽬录,针对Mac OS XgltSetWorkingDirectory(argv[0]);/// GLUT// 初始化GLUT库glutInit(&argc, argv);/// GLUT// 初始化渲染模式,其中标志GLUT_DOUBLE、GLUT_RGBA、GLUT_DEPTH、GLUT_STENCIL分别指双缓冲窗⼝、RGBA颜⾊模式、深度测试、模板缓冲区 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);/// GLUT// 初始化窗⼝⼤⼩glutInitWindowSize(800, 720);/// GLUT// 创建窗⼝glutCreateWindow("Triangle");/// GLUT// 注册回调函数,拦截窗⼝⼤⼩变化消息,ChangeSize是⾃定义⽅法名glutReshapeFunc(ChangeSize);/// GLUT// 注册回调函数,拦截窗⼝渲染消息,RenderScene是⾃定义⽅法名glutDisplayFunc(RenderScene);/// GLUT/*这⾥是键盘特殊按键点击回调注册(glutSpecialFunc)GLUT语法中,特殊按键指功能键或者⽅向键(上下左右箭头键等)它还有另⼀个键盘普通按键点击的回调注册(glutKeyboardFunc),⽐如空格键*/// 注册键盘特殊按键点击回调函数glutSpecialFunc(SpecialKeys);/// glew// 确保驱动程序的初始化中没有出现任何问题GLenum err = glewInit();if (GLEW_OK != err) {/// glewfprintf(stderr, "glew erroe:%s\n", glewGetErrorString(err));return1;}/// (⾃定义函数)// 初始化设置SetupRC();/// GLUT// 进⼊调⽤循环glutMainLoop();return0;}#pragma mark - 启动程序,调⽤函数的顺序/*1 主函数int main(int argc, char *argv[])2 为程序做⼀次性的设置void SetupRC()3 窗⼝⼤⼩改变时接受新的宽度和⾼度void ChangeSize(int w, int h)4 开始渲染void RenderScene(void)*/#pragma mark - 拖动窗⼝,调⽤函数的顺序/*1 窗⼝⼤⼩改变时接受新的宽度和⾼度void ChangeSize(int w, int h)2 开始渲染void RenderScene(void)*/#pragma mark - 键盘按动,调⽤函数的顺序/*1、void SpecialKeys(GLint key, GLint x, GLint y)2、void BourceFunction(int key)3、void RenderScene(void)*/#pragma mark - 全局变量的操作/*1 定义批次GLBatch squareBatch;2 属性设置squareBatch.Begin(GL_TRIANGLES, 3);squareBatch.CopyVertexData3f(vVerts);squareBatch.End();3 启⽤绘制功能squareBatch.Draw();4 顶点数据的更改squareBatch.CopyVertexData3f(vVerts);5 重新启⽤绘制功能squareBatch.Draw();*//*1 定义着⾊管理器GLShaderManager shaderManager;2 初始化着⾊管理器shaderManager.InitializeStockShaders();3 使⽤着⾊管理器渲染eStockShader(GLT_SHADER_IDENTITY, vRed); */#pragma mark - 关键函数的理解代码运⾏后的效果图如下图所⽰:然后按键盘的上下左右⽅向键是可以移动中间的四边形的。
GLUT教程(九)GLUT鼠标收藏在前几节,我们看了怎么使用GLUT的keyboard函数,来增加一个OpenGL程序的交互性。
现在,是时候研究下鼠标了。
GLUT的鼠标接口提供一些列的选项来增加鼠标的交互性。
也就是检测鼠标单击,和鼠标移动。
检测鼠标Clicks和键盘处理一样,GLUT为你的注册函数(也就是处理鼠标clicks事件的函数)提供了一个方法。
函数glutMouseFunc,这个函数一般在程序初始化阶段被调用。
函数原型如下:void glutMouseFunc(void(*func)(int button,int state,int x,int y));参数:func:处理鼠标click事件的函数的函数名。
从上面可以看到到,处理鼠标click事件的函数,一定有4个参数。
第一个参数表明哪个鼠标键被按下或松开,这个变量可以是下面的三个值中的一个:GLUT_LEFT_BUTTONGLUT_MIDDLE_BUTTONGLUT_RIGHT_BUTTON第二个参数表明,函数被调用发生时,鼠标的状态,也就是是被按下,或松开,可能取值如下:GLUT_DOWNGLUT_UP当函数被调用时,state的值是GLUT_DOWN,那么程序可能会假定将会有个GLUT_UP事件,甚至鼠标移动到窗口外面,也如此。
然而,如果程序调用glutMouseFunc传递NULL作为参数,那么GLUT将不会改变鼠标的状态。
剩下的两个参数(x,y)提供了鼠标当前的窗口坐标(以左上角为原点)。
检测动作(motion)GLUT 提供鼠标motion检测能力。
有两种GLUT处理的motion:active motion和passive motion。
Active motion是指鼠标移动并且有一个鼠标键被按下。
Passive motion是指当鼠标移动时,并有没鼠标键按下。
如果一个程序正在追踪鼠标,那么鼠标移动期间,没一帧将产生一个结果。
使用opengl程序绘制实线虚线和点划线OpenGL是一种用于绘制2D和3D图形的跨平台编程接口。
它提供了一套功能强大的函数和工具,可以在各种显示设备上渲染图形。
在OpenGL中,可以使用不同的绘制模式来绘制实线、虚线和点划线。
本文将介绍如何使用OpenGL程序实现这些效果。
在开始之前,我们首先需要安装OpenGL库和开发环境。
OpenGL可以在不同的平台上使用,例如Windows、Linux和macOS。
对于Windows用户,可以使用MinGW或者MSYS2等工具链来配置开发环境。
对于Linux和macOS用户,可以使用GCC和Xcode来配置开发环境。
安装完成后,我们可以开始编写OpenGL程序。
在OpenGL中,绘图是通过一系列函数和状态来实现的。
以下是一个基本的OpenGL程序的框架:```cpp#include <GL/glut.h>void displa//清空屏幕glClear(GL_COLOR_BUFFER_BIT);//设置绘图颜色glColor3f(1.0f, 1.0f, 1.0f);//绘制实线glBegin(GL_LINES);glVertex2f(-0.5f, 0.0f);glVertex2f(0.5f, 0.0f);glEnd(;//绘制虚线//...//绘制点划线//...//刷新缓冲区glutSwapBuffers(;int main(int argc, char** argv)// 初始化窗口和OpenGL环境glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE , GLUT_RGB); glutInitWindowSize(800, 600); glutCreateWindow("OpenGL Program");//注册绘图函数glutDisplayFunc(display);//进入主循环glutMainLoop(;return 0;```在以上程序中,`glClear(GL_COLOR_BUFFER_BIT)`用于清空屏幕,`glColor3f(1.0f, 1.0f, 1.0f)`用于设置绘图颜色。
第一章基于VC++的OpenGL编程讲座之概述前言随着计算机多媒体技术、可视化技术及图形学技术的发展,我们可以使用计算机来精确地再现现实世界中的绚丽多彩的三维物体,并充分发挥自身的创造性思维,通过人机交互来模拟、改造现实世界,这就是目前最为时髦的虚拟现实技术。
通过这种技术,建筑工程师可以直接设计出美观的楼房模型;军事指挥员可以模拟战场进行军事推演,网民可以足不出户游览故宫博物馆等名胜古迹等。
而虚拟现实技术最重要的一部分内容就是三维图形编程。
当前,三维图形编程工具中最为突出的是SGI公司的OpenGL(Open Graphics Language,开放式的图形语言),它已经成为一个工业标准的计算机三维图形软件开发接口,并广泛应用于游戏开发、建筑、产品设计、医学、地球科学、流体力学等领域。
值得一提的是,虽然微软有自己的三维编程开发工具DirectX,但它也提供OpenGL图形标准,因此,OpenGL可以在微机中广泛应用。
目前,OpenGL在国内外都掀起了热潮,但国内对这一领域介绍的资料并不是很多,特别是有志于在图形图像方面进行深入研究的读者朋友,常常苦于不掌握OpenGL编程接口技术,无法向纵深领域扩展。
为了开启三维图形编程这扇神秘大门,本讲座在结合OpenGL 有关理论知识的基础上,着重介绍Visual C++6.0开发环境中的编程实现,由于水平有限,本讲座可能无法面面俱到,存在一些疏漏,但相信它可以将开启"神秘大门"的钥匙交给读者朋友们。
一、OpenGL的特点及功能OpenGL是用于开发简捷的交互式二维和三维图形应用程序的最佳环境,任何高性能的图形应用程序,从3D动画、CAD辅助设计到可视化访真,都可以利用OpenGL高质量、高性能的特点。
OpenGL自1992年出现以来,逐渐发展完善,已成为一个唯一开放的,独立于应用平台的图形标准,一个典型的OpenGL应用程序可以在任何平台上运行--只需要使用目标系统的OpenGL库重新编译一下。
实验1 OpenGL初识一、实验目的:熟悉编程环境;了解光栅图形显示器的特点;了解计算机绘图的特点;利用VC+OpenGL作为开发平台设计程序,以能够在屏幕上生成任意一个像素点为本实验的结束。
二、实验内容:(1)了解和使用VC的开发环境,理解简单的OpenGL程序结构。
(2)掌握OpenGL提供的基本图形函数,尤其是生成点的函数。
三、该程序的作用是在一个黑色的窗口中央画一个矩形、三角形和三个点,如图所示。
下面对各行语句进行说明:首先,需要包含头文件#include <GL/glut.h>,这是GLUT的头文件。
然后看main函数。
int main(int argc, char *argv[]),这个是带命令行参数的main函数。
这种以glut开头的函数都是GLUT工具包所提供的函数,下面对用到的几个函数进行介绍;1)glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。
其格式比较固定,一般都是glutInit(&argc, argv)就行;2) glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。
GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。
更多信息,以后的实验教程会有讲解介绍;3) glutInitWindowPosition,设置窗口在屏幕中的位置;4) glutInitWindowSize,设置窗口的大小;5) glutCreateWindow,根据前述设置的信息创建窗口。
参数将被作为窗口的标题。
注意:窗口被创建后,并不立即显示到屏幕上。
需要调用glutMainLoop才能看到窗口;6) glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用。
(暂且这样理解);7) glutMainLoop,进行一个消息循环。
OpenGL学习--glut库中的主要函数
glut库下的主要函数:
一。
初始化
void glutInit(int* argc,char** argv)
这个函数用来初始化GLUT库。
对应main函数的形式应是:int main(int argc,char* argv[]);
这个函数从main函数获取其两个参数。
void glutInitWindowSize(int width,int height);
void glutInitWindowPosition(int x,int y);
这两个函数很好理解是设置glut程序要产生的窗口的大小和位置(左上角)。
以像素为单位。
void glutInitDisplayMode(unsigned int mode);
设置图形显示模式。
参数mode的可选值为:
GLUT_RGBA:当未指明GLUT—RGBA或GLUT—INDEX时,是默认使用的模式。
表明欲建立RGBA模式的窗口。
GLUT_RGB:与GLUT—RGBA作用相同。
GLUT_INDEX:指明为颜色索引模式。
GLUT_SINGLE:只使用单缓存
GLUT_DOUBLE:使用双缓存。
以避免把计算机作图的过程都表现出来,或者为了平滑地实现动画。
GLUT_ACCUM:让窗口使用累加的缓存。
GLUT_ALPHA:让颜色缓冲区使用alpha组件。
GLUT_DEPTH:使用深度缓存。
GLUT_STENCIL:使用模板缓存。
GLUT_MULTISAMPLE:让窗口支持多例程。
GLUT_STEREO:使窗口支持立体。
GLUT_LUMINACE:luminance是亮度的意思。
但是很遗憾,在多数OpenGL平台上,不被支持。
--------------------------------------------------------------------------------
二。
事件处理(Event Processing)
void glutMainLoop(void)
让glut程序进入事件循环。
在一个glut程序中最多只能调用一次。
一旦调用,会直到程序结束才返回。
--------------------------------------------------------------------------------
三。
窗口管理(Window Management)
int glutCreateWindow(char* name);
产生一个顶层的窗口。
name 作为窗口的名字,也就是窗口标题栏显示的内容。
返回值是生成窗口的标记符,可用函数glutGetWindow()加以引用。
int glutCreateSubWindow(int win,int x,int y,int width,int height);
创建一个子窗口。
win是其父窗口的标记符。
x,y是相对父窗口的位移,以像素表示。
width,height是子窗口的宽和高。
void glutSetWindow(int win);
int glutGetWindow(void);
功能分别是:设置标记符为win的窗口为当前窗口;返回当前窗口的标记符。
void glutDestroyWindow(int win);
销毁以win标记的窗口。
void glutPostRedisplay(void);
将当前窗口打上标记,标记其需要再次显示。
void glutSwapBuffers(void);
当窗口模式为双缓存时,此函数的功能就是把后台缓存的内容交换到前台显示。
当然,只有单缓存时,使用它的功能跟用glFlush()一样。
而使用双缓存是为了把完整图画一次性显示在窗口上,或者是为了实现动画。
void glutPositionWindow(int x,int y);
改变当前窗口的位置:当前窗口是顶层窗口时,x,y是相对于屏幕的的位移;当前窗口若是子窗口时,x,y是相对其父窗口原点的位移。
void glutReshapeWindow(int width,int height);
改变当前窗口的大小。
width,height是当前窗口新的宽度和高度值,当然只能是正值。
void glutFullscreen(void);
让当前窗口全屏显示。
当前窗口是顶层窗口时才有效。
void glutPopWindow(void);
void glutPushWindow(void);
对顶层窗口和子窗口均有效。
改变当前窗口在栈中相对于其它窗口的次序。
void glutShowWindow(void);
void glutHideWindow(void);
void glutIconifyWindow(void);
这三个函数作用是改变当前窗口的显示状态。
glutShowWindow让当前窗口可视(这时它还是可能被其它窗口挡住)。
glutHideWindow让当前窗口成为不可视状态。
glutIconifyWindow让当前窗口成为一个图标,也即是最小化。
glutSetWindowTitle(char* name);
glutSetIconTitle(char* name);
设置当前窗口(必须是顶层窗口)的标题和图标化时的标题。
glutSetCursor(int cursor);
设置当前窗口的光标样式。
cursor可选值有许多:如GLUT_CURSOR_RIGHT_ARROW指向右边的光标,GLUT_CURSOR_LEFT_ARROW指向左边的光标,GLUT_CURSOR_INFO成为手状。
GLUT_CURSOR_DESTROY呈叉状,GLUT_CURSOR_HELP呈现问号的形状。
等等。
--------------------------------------------------------------------------------
四。
窗口的覆盖管理
void glutEstablishOverlay(void);
对当前窗口创建覆盖图层。
该覆盖图的模式由初始化显示模式函数glutDisplayMode()决定。
glutLayerGet(GLUT_OVERLAY_POSSIBLE)可用以设置对于当前窗口,是否允许产生由初始化显示模式函数规定其模式的覆盖图层。
void glutUserLayer(GLenum layer);
枚举量layer可选值为:GLUT_NORMAL,GLUT_OVERLAY.分别选取正常位平面或覆盖平面。
void glutRemoveLayer(void);
除去覆盖图。
当没有覆盖图层时,调用这条语句也是安全的,这时系统不做任何事。
void glutPostOverlayRedisplay(void);
标记该覆盖图层为需要重新显示的状态。
void glutShowOverlay(void);
void glutHideOverlay(void);
显示当前窗口的覆盖图层;隐藏覆盖图层。
这两条语句即时执行。
注意一下,只有窗口可视时,使用glutShowOverlay才能使其覆盖图层可视。
当窗口被其他窗口遮挡时,其覆盖图层也被遮挡从而不可视。