码迷,mamicode.com
首页 > 其他好文 > 详细

OpenGL的一些基本概念

时间:2015-05-17 09:22:29      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:opengl

首先厘清几个库文件之间的关系,即 gl, glu, glut,glaux 之间的区别

gl
glu
glut
glu32
glut32
glut
opengl

后缀为.a.lib。 带32,.lib后缀的一般是window平台下的,而.a后缀一般是linux平台下。

以下说明中带*后缀的函数表示该函数有多种版本

下表列出一些后缀字母,它们分别指定了OpenGL的ISO C实现所提供的数据类型

后缀 数据类型 典型的对应C语言类型 OpenGL类型
b 8位整数 singed char GLbyte
s 16位整数 short GLshort
i 32位整数 int GLint
f 32位浮点数 float GLfloat
d 64位浮点数 double GLdouble

对于某些带字母v后缀的函数,表示这个函数所接受的参数是一个指向向量(或数组)的指针。

最后,OpenGL还定义了GLvoid类型。这种类型最常用于那些接受向量数组为参数的指针为参数的OpenGL函数。

OpenGL函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。从图1可以看出,gl是核心,glu是对gl的部分封装。glx、agl、wgl 是针对不同窗口系统的函数。glut是为跨平台的OpenGL程序的工具包,比aux功能强大。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。下面逐一对这些库进行详细介绍。

  1. OpenGL核心库
    核心库包含有115个函数,函数名的前缀为gl。

    这部分函数用于常规的、核心的图形处理。此函数由gl.dll来负责解释执行。据类型的参数,因此派生出来的函数原形多达300多个。

    核心库中的函数主要可以分为以下几类函数:

    • 绘制基本几何图元的函数。如绘制图元的函数:
      glBegain()、
      glEnd()、
      glNormal*()、
      glVertex*()。

    • 矩阵操作、几何变换和投影变换的函数。如:
      矩阵入栈函数glPushMatrix()、
      矩阵出栈 函数glPopMatrix()、
      装载矩阵函数glLoadMatrix()、
      矩阵相乘函数glMultMatrix(),
      当前矩阵函数glMatrixMode()
      矩阵标准化函数glLoadIdentity(),
      几何变换函数glTranslate*()、glRotate*()和glScale*(),
      投影变换函数glOrtho()、glFrustum()
      视口变换函数glViewport()等等。

    • 颜色、光照和材质的函数。如:
      设置颜色模式函数glColor*()、glIndex*(),
      设置光照效果的函数glLight*() 、glLightModel*()
      设置材质效果函数glMaterial()等等。

    • 显示列表函数、主要有创建、结束、生成、删除和调用显示列表的函数:
      glNewList()、
      glEndList()、
      glGenLists()、
      glCallList()
      glDeleteLists()。

    • 纹理映射函数,主要有:
      一维纹理函数glTexImage1D()、
      二维纹理函数glTexImage2D()、
      设置纹理参数、纹理环境和纹理坐标函数
      glTexParameter*()、
      glTexEnv*()
      glTetCoord*()等。

    • 特殊效果函数:
      融合函数glBlendFunc()、
      反走样函数glHint()
      雾化效果glFog*()。

    • 光栅化、象素操作函数。如:
      象素位置glRasterPos*()、
      线型宽度glLineWidth()、
      多边形绘制模式glPolygonMode(),
      读取象素glReadPixel()、
      复制象素glCopyPixel()等。

    • 选择与反馈函数:
      主要有渲染模式glRenderMode()、
      选择缓冲区glSelectBuffer()
      反馈缓冲区glFeedbackBuffer()等。

    • 曲线与曲面的绘制函数:
      生成曲线或曲面的函数glMap*()、glMapGrid*(),
      求值器的函数glEvalCoord*() glEvalMesh*()。
      状态设置与查询函数。主要有glGet*()、glEnable()、glGetError()等。

  2. OpenGL实用库The OpenGL Utility Library (GLU)
    包含有43个函数,函数名的前缀为glu。

    OpenGL提供了强大的但是为数不多的绘图命令,所有较复杂的绘图都必须从点。线、面开始。Glu 为了减轻繁重的编程工作,封装了OpenGL函数,Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。此函数由glu.dll来负责解释执行。

    OpenGL中的核心库和实用库可以在所有的OpenGL平台上运行。主要包括了以下几种:

    • 辅助纹理贴图函数,有:
      gluScaleImage() 、
      gluBuild1Dmipmaps()、
      gluBuild2Dmipmaps()。

    • 坐标转换和投影变换函数:
      定义投影方式函数gluPerspective()、gluOrtho2D() 、gluLookAt(),
      拾取投影视景体函数gluPickMatrix(),
      投影矩阵计算gluProject()和 gluUnProject()等等。

    • 多边形镶嵌工具,有:
      gluNewTess()、
      gluDeleteTess()、
      gluTessCallback()、
      gluBeginPolygon()
      gluTessVertex()、
      gluNextContour()、
      gluEndPolygon()等等。

    • 二次曲面绘制工具,主要有绘制球面、锥面、柱面、圆环面:
      gluNewQuadric()、
      gluSphere()、
      gluCylinder()、
      gluDisk()、
      gluPartialDisk()、
      gluDeleteQuadric()等等。

    • 非均匀有理B样条绘制工具,主要用来定义和绘制Nurbs曲线和曲面,包括:
      gluNewNurbsRenderer()、
      gluNurbsCurve()、
      gluBeginSurface()、
      gluEndSurface()、
      gluBeginCurve()、
      gluNurbsProperty()等函数。

    • 错误反馈工具,获取出错信息的字符串gluErrorString()

  3. OpenGL辅助库
    包含有31个函数,函数名前缀为aux。

    这部分函数提供窗口管理、输入输出处理以及绘制一些简单三维物体。此函数由glaux.dll来负责解释执行。创建aux库是为了学习和编写OpenGL程序,它更像是一个用于测试创意的预备基础接管。Aux库在windows实现有很多错误,因此很容易导致频繁的崩溃。在跨平台的编程实例和演示中,aux很大程度上已经被glut库取代。OpenGL中的辅助库不能在所有的OpenGL平台上运行。

    辅助库函数主要包括以下几类:

    • 窗口初始化和退出函数,
      auxInitDisplayMode()
      auxInitPosition()。

    • 窗口处理和时间输入函数,
      auxReshapeFunc()、
      auxKeyFunc()
      auxMouseFunc()。

    • 颜色索引装入函数:auxSetOneColor()

    • 三维物体绘制函数。包括了两种形式网状体和实心体,如绘制立方体auxWireCube()和 auxSolidCube()。这里以网状体为例,
      长方体auxWireBox()、
      环形圆纹面auxWireTorus()、
      圆柱auxWireCylinder()、
      二十面体auxWireIcosahedron()、
      八面体auxWireOctahedron()、
      四面体auxWireTetrahedron()、
      十二面体auxWireDodecahedron()、
      圆锥体auxWireCone()
      茶壶auxWireTeapot()。

    • 背景过程管理函数auxIdleFunc()。

    • 程序运行函数auxMainLoop()。

  4. OpenGL工具库 OpenGL Utility Toolkit
    包含大约30多个函数,函数名前缀为glut。

    glut是不依赖于窗口平台的OpenGL工具包,由Mark KLilgrad在SGI编写(现在在Nvidia),目的是隐藏不同窗口平台API的复杂度。 函数以glut开头,它们作为aux库功能更强的替代品,提供更为复杂的绘制功能,此函数由glut.dll来负责解释执行。由于glut中的窗口管理函数是不依赖于运行环境的,因此OpenGL中的工具库可以在X-Window, Windows NT, OS/2等系统下运行,特别适合于开发不需要复杂界面的OpenGL示例程序。对于有经验的程序员来说,一般先用glut理顺3D图形代码,然后再集成为完整的应用程序。

    这部分函数主要包括:

    • 窗口操作函数,窗口初始化、窗口大小、窗口位置等函数:
      glutInit()
      glutInitDisplayMode()
      glutInitWindowSize()
      glutInitWindowPosition()等。

    • 回调函数。响应刷新消息、键盘消息、鼠标消息、定时器函数等:
      GlutDisplayFunc()
      glutPostRedisplay()
      glutReshapeFunc()
      glutTimerFunc()
      glutKeyboardFunc()
      glutMouseFunc()。

    • 创建复杂的三维物体。这些和aux库的函数功能相同。创建网状体和实心体。如glutSolidSphere()、glutWireSphere()等。在此不再叙述。

    • 菜单函数。创建添加菜单的函数
      GlutCreateMenu()、
      glutSetMenu()、
      glutAddMenuEntry()、
      glutAddSubMenu()
      glutAttachMenu()。

    • 程序运行函数,glutMainLoop()。

OpenGL的一些基本概念

标签:opengl

原文地址:http://blog.csdn.net/u012675539/article/details/45780363

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!