OpenGL辅助库基本使用

原创 2015年07月09日 15:46:59

OpenGL是一个开放的系统,它是独立于任何窗口系统或操作系统的。尽管它包含了许多图形函数,但它却没有窗口函数,也没有从键盘和鼠标读取事件的函数,所以要初学者写出一个完整的图形程序是相当困难的。另外,OpenGL图形函数中只提供基本的几何原形:点、线、多边形,因此要创建基本的三维几何体如球、锥体等,也很不容易。而OpenGL辅助库就是为解决这些基本问题专门设计的,它提供了一些基本的窗口管理函数和三维图形绘制函数,能帮助初学者尽快进入OpenGL世界,掌握关键的三维图形技术,体会其中奇妙的乐趣。但是,对于复杂的应用,这些函数远远不够,只能作为参考。

辅助库函数分类
  这一节内容可以作为手册查阅,初学者不必深究。
  辅助库函数大致分为六类:

  1 窗口初始化和退出
  相关函数有三个,它们在第一章已提到,这里将详细介绍:

  void auxInitWindow(GLbyte *titleString)

  打开一个由auxInitDisplayMode()和auxInitPosition()指定的窗口。函数参数是窗口标题,窗口背景缺省颜色是RGBA下的黑色或颜色表(color_index)下的0号调色板的颜色。按下Escape键可以完成关掉窗口、结束程序、全部清屏三项功能。

  void auxInitDisplayMode(GLbitfield mask)

  设置窗口显示模式。基本模式有RGBA或颜色表、单或双缓存,也可指定其他附加模式:深度、模板或累积缓存(depth,stencil,and/or accumulation buffer)。参数mask是一组位标志的联合(取或),AUX_RGBA或AUX_INDEX、AUX_SINGLE或AUX_DOUBLE,以及其它有效标志AUX_DEPTH、AUX_STENCIL或AUX_ACCUM。

  void auxInitPosition(GLint x,GLint y,GLsizei width,GLsizei height)

  设置窗口位置及大小。参数(x, y)为窗口的左上角点的屏幕坐标,参数(width, height)为窗口的宽度和高度,单位为象素,缺省值为(0, 0, 100, 100)。

  2 窗口处理和事件输入
  当窗口创建后,且在进入主函数循环之前,应当登记以下列出的回调函数(callback function):

  void auxReshapeFunc(void(*function)(GLsizei,GLsizei))

  定义窗口改变时形状重定函数。参数function是一个函数指针,这个函数带有两个参数,即窗口改变后的新宽度和新高度。通常,function是glViewport(),显示裁减后的新尺寸,重定义投影矩阵,以便使投影后图像的比例与视点匹配,避免比例失调。若不调用auxReshapeFunc(),缺省重定物体形状的函数功能是调用一个二维的正射投影矩阵。运用辅助库,窗口将在每个事件改变后自动重新绘制。

  void auxKeyFunction(GLint key,void(*function)(void))

  定义键盘响应函数。参数function就是当按下key键时所调用的函数指针,辅助库为参数key定义了几个常量:AUX_0至AUX_9、AUX_A至AUX_Z、AUX_a至AUX_z、AUX_LEFT、AUX_RIGHT、AUX_UP、AUX_DOWN(方向键)、AUX_ESCAPE、AUX_SPACE或AUX_RETURN。

  void auxMouseFunc(GLint button,Glint mode,void(*function)(AUX_EVENTREC *))

  定义鼠标响应函数。参数function就是当鼠标以mode方式作用于button时所调用的函数。参数button有AUX_LEFTBUTTON、AUX_MIDDLEBUTTON或AUX_RIGHTBUTTON(以右手为标准)。参数mode代表鼠标触击状态,击中时为AUX_MOUSEDOWN,释放时为AUX_MOUSEUP。参数function必须带一个参数,它是指向结构AUX_EVENNTREC的指针。当函数auxMouseFunc()被调用时将为这个结构分配相应的内存。通常用法类似如下:
      

 
  1. void function(AUX_EVENTREC *event)  
  2.   {  
  3.     GLint x,y;  
  4.     x=event->data[AUX_MOUSEX];  
  5.     y=event->data[AUX_MOUSEY];  
  6.     ...  
  7.   }  

  
  3 颜色表装入
  因为OpenGL本身没有窗口系统,所以依赖于窗口系统的颜色映射就没法装入颜色查找表。如果采用颜色表模式,就要用到辅助库提供的用RGB值定义的单个颜色索引函数:

  void auxSetOneColor(GLint index,GLfloat red,GLfloat green,GLfloat blue)

  设置自定义颜色的索引。参数index即索引号,参数red、green、blue分别为红、绿、蓝值,范围在(0~1)内。

  4 三维物体绘制
  每组三维物体包括两种形式:网状体(wire)和实心体(solid)。网状体没有平面法向,而实心体有,能进行光影计算,有光照时采用实心体模型。下面这些函数的 参数都是定义物体大小的,可以改变。

功能
函数
绘制球
void auxWireSphere(GLdouble radius)
void auxSolidSphere(GLdouble radius)
绘制立方体
void auxWireCube(GLdouble size)
void auxSolidCube(GLdouble size)
绘制长方体
void auxWireBox(GLdouble width,GLdouble height,GLdouble depth)
void auxSolidBox(GLdouble width,GLdouble height,GLdouble depth)
绘制环形圆纹面
void auxWireTorus(GLdouble innerRadius,GLdouble outerRadius)
void auxSolidTorus(GLdouble innerRadius,GLdouble outerRadius)
绘制圆柱
void auxWireCylinder(GLdouble radius,GLdouble height)
void auxSolidCylinder(GLdouble radius,GLdouble height)
绘制二十面体
void auxWireIcosahedron(GLdouble radius)
void auxSolidIcosahedron(GLdouble radius)
绘制八面体
void auxWireOctahedron(GLdouble radius)
void auxSolidOctahedron(GLdouble radius)
绘制四面体
void auxWireTetrahedron(GLdouble radius)
void auxSolidTetrahedron(GLdouble radius)
绘制十二面体
void auxWireDodecahedron(GLdouble radius)
void auxSolidDodecahedron(GLdouble radius)
绘制圆锥
void auxWireCone(GLdouble radius,GLdouble height)
void auxSolidCone(GLdouble radius,GLdouble height)
绘制茶壶
void auxWireTeapot(GLdouble size)
void aucSolidTeapot(GLdouble size)


  以上物体均以各自中心为原点绘制,所有坐标都已单位化,可以缩放。

  5 背景过程管理

  void auxIdleFunc(void *func)

  定义空闲状态执行函数。参数func是一个指针,指向所要执行的函数功能。当它为零时,func执行无效。

  6 程序运行

  void auxMainLoop(void(*displayFunc)(void))

  定义场景绘制循环函数。displayFunc指针指向场景绘制函数。当窗口需要更新或场景发生改变时,程序便调用它所指的函数,重新绘制场景。

OpenGL 库 简介

OpenGL 库 简介       OpenGL库函数的命名方式为:。库前缀有gl、glu、aux、glut、wgl、glx、agl等等,表示该函数属于OpenGL哪个库。参数的类型:I代表int型,...
  • Augusdi
  • Augusdi
  • 2014年04月17日 11:00
  • 1662

opengl 库的说明和简单使用

来源:http://www.cnblogs.com/crazyxiaom/articles/2073586.html 1.库的说明 所有 OpenGL 函数采用了以下格式:。 库前缀有 gl、g...
  • sentimental_dog
  • sentimental_dog
  • 2017年03月10日 15:04
  • 962

OpenGL基础图形编程(六)OpenGL辅组库的基本使用

OpenGL是一个开放的系统,它是独立于任何窗口系统或操作系统的。尽管它包含了许多图形函数,但它却没有窗口函数,也没有从键盘和鼠标读取事件的函数,所以要初学者写出一个完整的图形程序是相当困难的。另外,...
  • heyuchang666
  • heyuchang666
  • 2016年04月09日 17:24
  • 2197

OpenGL程序的基本结构

OpenGL入门;了解第一个OpenGL程序
  • qq_23879187
  • qq_23879187
  • 2017年12月04日 22:35
  • 59

Dev C++环境中使用OpenGL

引入dev-c++实际上已经包含了开发opengl程序基本的功能可以简单的选择:新建-multimedia-opengl,建立一个opengl程序。这个程序包含了基本的opengl程序的结构,包括生成...
  • u012675539
  • u012675539
  • 2015年05月14日 01:24
  • 3962

深入了解OpenGL——绘制基本图元

这是本资料的正式第一讲。 本讲将主要介绍一个最最简单的OpenGL应用,并且附有Mac OS X Snow Leopard系统以及iPhone OS3.1.3系统的OpenGL代码。 通过本讲,各...
  • nogodoss
  • nogodoss
  • 2014年05月29日 15:25
  • 4916

OpenGL 按照三角形仿射变换并贴图渲染(基于shader)(二)

OpenGL 按照三角形仿射变换并贴图渲染(正常渲染或离屏渲染以及异步优化)(二)标签(空格分隔):CG opengl前面我们详细介绍过OpenGL 按照三角形仿射变换并贴图渲染的过程(一),是基于O...
  • hust_sheng
  • hust_sheng
  • 2017年08月28日 19:48
  • 406

OpenGL 入门基础知识

环境      Android Studio      使用JAVA 学习 OpenGLES  参考书籍  《OpenGL es 2.0 上卷》 ...
  • talent_jian
  • talent_jian
  • 2016年10月16日 22:52
  • 449

Ubuntu下QtOpenGL无法正常使用GLU库的解决方法

一、修改makefile文件 某个库的接口不被识别的最可能的原因是没有包含该库的头文件,可以尝试将 #include 加到每一个使用GLU库的CPP文件前,结果发现还是无法使用GLU库,而后发现...
  • x_xiaosi
  • x_xiaosi
  • 2014年11月16日 15:00
  • 985

OpenGL: aux辅助库规则几何对象

辅助类分类:1)窗口初始化函数2)窗口处理和事件处理函数3)定义场景绘制循环函数4)三围物体绘制函数5)颜色索引表装入函数6)空闲事件处理函数下面设计了一个程序,该程序尽可能涵盖辅助库的所有函数。该程...
  • Augusdi
  • Augusdi
  • 2014年03月04日 16:40
  • 3372
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenGL辅助库基本使用
举报原因:
原因补充:

(最多只允许输入30个字)