版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、图形设计基础学时:48上课时间:星期三7-8节(Z426) 星期五5-6节(Z525)单周HPQ:503941104Room:Z323第1章 OpenGL基础知识掌握图形学编程的基本概念。了解OpenGL的基本功能与操作。学习图形系统和模型的基本原理、结构SGI(1)SGI(Silicon Graphics )中文商标:硅图美国硅图公司成立于1982年,是一个生产高性能计算机系统的跨国公司,总部设在美国加州旧金山硅谷MOUNTAIN VIEW的SGI公司是业界高性能计算系统、复杂数据管理及可视化产品的重要提供商. 它提供世界上最优秀的服务器系列以及具有超级计算能力的可
2、视化工作站。SGI公司是美国Fortune杂志所列美国最大500家公司/生产企业之一,年产值超过40亿美元。近五年公司平均增长率为40-50%,是世界上发展最快的一家计算机公司。公司在业界率先集成了RISC技术、均衡多重处理技术、数字化媒体技术、计算机图形技术、UMA及CCNUMA体系结构等计算机领域的核心科技,形成了自己的独特风格,开创了视算科技及信息处理的新方向。目SGI在超级计算领域更是取得了世界上500台最大超级计算机中半数以上的市场份额。超级计算机,g代表图形工作站,i代表具有突破性的洞察力。采用我们的服务器,你就拥有非凡的计算能力帮助你解决最为棘手的问题。我们的图形工作站可以用更形
3、象化的方式观看、操作和使用数据。当你与我们分布在全球范围的服务队伍相结合时,你就可以获得所需要的解决方案,实现理想。SGI(2)SGI的创始人James Clark吉姆克拉克博士。在当今的计算机界,SGI 的名字虽不如IBM、HP那样有名,但其产品和技术在图形和高性能计算领域有着其他产品无法替代的地位。SGI公司早期便致力于图形卡的研究和制造,后来便开始生产自己的图形工作站产品。 SGI的创始人是吉姆克拉克(James Clark)博士,他出生于美国德州乡村小镇,中学辍学参军,靠自学获得中学同等学力。服完兵役的克拉克考进犹他大学专攻电脑制图,1978年获博士学位。四年后,他以自己研制的图形工作
4、站和三维绘图软件创办SGI,然后快速成长为世界著名的图形软硬件制造商。1995年并购著名的动画软件公司Alias Wavefront(2004年售出),从而拥有了属于自己的软件。看看SGI的发展史:1983年,第一批图形终端推出;1984年,第一批图形工作站推出,由此可以看出,它对图形工作站的贡献有多么巨大。大家所熟悉的玩具总动员、侏罗纪公园、泰坦尼克号、指环王、紧急迫降等影片均是在SGI的图形工作站上制作出来的。这里顺便说一下,世界电影史上花费最大、最成功的电影之一泰坦尼克号的成功很大程度上得益于它对电脑动画的大量应用,成功模拟了当时悲壮的情景。世界著名的数字工作室Digital Domai
5、n公司用了一年半的时间,动用了300多台SGI超级工作站,并派出50多个特技师一天24小时轮流制作泰坦尼克号中的电脑特技。1.1.2 0penCL是三维图形的开发标准 20世纪90年代,随着软硬件技术的发展,三维图形迅猛发展。OpenGL通过对图形库的进一步发展,实现了二维和三维的高级技术。1.1.3 OpenGL的基本功能模型绘制模型观察颜色模式的指定光照应用图像效果增强位图和图像处理纹理映射实时动画交互技术1.1.4 0penGL的体系结构 应用程序OpenGL窗口系统操作系统图形硬件Fig 1.1 OPenGL层次应用程序Fig 1.2 OPenGL/Windows体系OpenGL32.
6、dllGDI32.dll可安装的客户端驱动程序WinSrv.dll相关DDIWin32.DDI视频显示驱动程序首先创建工程其步骤如下:1)创建一个Win32 Console Application。2)链接OpenGL libraries。在Visual C+中先单击Project,再单击Settings,再找到Link单击,最后在Object/library modules 的最前面加上OpenGL32.lib GLu32.lib GLaux.lib3)单击Project Settings中的C/C+标签,将Preprocessor definitions 中的_CONSOLE改为_WIND
7、OWS。最后单击OK。1.2 OpenGL图形的实现方式1.2.1 设备描述表与渲染描述表 OpenGL的绘图方式与Windows的一般绘图方式不同,区别为:Windows采用的是图形设备接口GDI绘图。OpenGL采用的是渲染描述表绘RC图。OpenGL采用的是特殊的像素格式。在Windows中使用GDI绘图时必须指定在哪个设备环境DC中绘制,同同样的在使用OpenGL函数时也必须指定一个所谓的渲染环境。正如DC要存储GDI的绘制环境信息如笔,刷和字体等,RC也必须保存OpenGL所需的渲染信息如像素格式等。 渲染描述表主要由以下6个函数来管理HGLRC wglCreateContext(
8、HDC hdc )该函数用来创建一个OpenGL可用的渲染环境。hdc必须是一个合法的支持至少16位色的屏幕设备描述表DC或内存设备描述表的句柄。该函数在调用前,设备描述表必须设置好适当的像素格式。成功创建渲染描述表之后,hdc可以释放或删除。函数返回NULL值表示失败,否则返回值为渲染上下文的句柄。BOOL wglDeleteContex( HGLRC hglrc )该函数删除一个RC,一般应用程序在删除RC之前,应使它成为非现行RC,不过,删除一个现行RC也是可以得。此时,OpenGL系统冲掉等待的绘图命令并使之成为非现行RC,后删除之。注意:删除一个属于别的线程的RC时会导致失败。HGL
9、RC wglGetCurrentcontext( void )该函数返回线程的现行RC,如果线程无现行RC则返回NULLHDC wglGetCurrentDC( void )该函数返回与线程现行RC关联的DC,如果线程无现行RC则返回NULL。BOOL wglMakeCurrent( HDC hdc, HGLRC hglrc )该函数把hdc和hglrc关联起来,并使hglrc成为调用线程的现行RC,如果传给hglrc的值为NULL,则函数解除关联,并置线程的现行RC为非现行RC,测试忽略hdc参数。注意:传给该函数的hdc可以不是调用wglCreateContext时使用的值,但是,他们所关
10、联的设备必须相同并且拥有相同的像素格式。6 BOOL wglUseFontBitmaps(HDC hdc, DWORD dwFirst, DWORD dwCount, DWORD dwBase)该函数使用hdc的当前字体,创建一系列指定范围字符的显示表。可以利用这些显示表在OpenGL窗口画GDI文本。如果OpenGL窗口是双缓冲的,那么这是往后缓冲区中画GDI文本的唯一途径。一般地,在使用单个RC的应用程序中,在相应WM_CREATE消息时创建RC,当WM_CLOSE或WM_DESTROY到来时再删除它。在使用OpenGL命令往窗口中绘图之前,必须先建立一个RC,并使之成为现行RC。Open
11、GL命令无需提供RC,它将自动使用现行RC。若无现行RC,OpenGL将简单地忽略所有的绘图命令。一个RC是指现行RC,这是针对调用线程而言的。一个线程在拥有现行RC进行绘图时,别的线程将无法同时绘图。一个线程一次只能拥有一个现行RC,但是可以拥有多个RC;一个RC也可以由多个线程共享,但是它每次只能在一个线程中是现行RC。在使用现行RC时,不应该释放或者删除与之关联的DC。如果应用程序在整个生命期内保持一个现行RC,则应用程序也一直占有一个DC资源。注意,Windows系统只有有限的DC资源。 管理RC与DC两种方法1、在WM_CREATE消息响应时创建RC,创建后立即释放DC;当WM_PA
12、INT消息到来时,程序再获取DC句柄,并与RC关联起来,绘图完成后,立即解除RC与DC得关联并释放DC;当WM_DESTROY消息到来时,程序只需简单的删除RC。2、RC在程序开始时创建并使之成为现行RC。它将保持为现行RC直至程序结束。相应的,GETDC在程序开始调用,RELEASEDC在程序结束时才调用。此中方法的好处是在相应WM_PAINT消息时,无需调用十分耗时的wglMakeCurrent函数。一般它要消耗几千个时钟周期。 Get the DC handle(GetDC)Create the RCRelease the DC handle(ReleaseDC)WM_CREATEGet
13、 the DC handle(GetDC)Make the RC currentDraw with OpenGLMake the RC not CurrentRelease the DC handle(Endpaint)WM_PAINTDelete the RCWM_DESTROY消息循环Fig1.7 渲染描述表与设备描述表的管理方法11.2.2 0penGL像素格式设置 像素格式是OpenGL窗口的重要属性,它包括是否使用双缓冲,颜色位数和类型以及深度位数等。像素格式可由Windows系统定义的所谓像素格式描述子结构来定义(PIXELFORMATDESCRIPTOR),该结构定义在windo
14、ws.h中。在该结构中包含有26个属性信息,其形式为: typedef structtagPIXELFORMATDESCRIPTORWORD nSize;该结构所占内存空间。WORD nVersion;版本号,当前为1。DWORD dwFlags; PFD_DRAW_TO_BITMAP支持内存中绘制位图PFD_DRAW_TO_WINDOW 支持屏幕绘图PFD_DOUBLEBUFFER 支持双缓冲PFD_CENERIC_FORMAT 指定选择GDI支持的像素格式PFD_NEED_PALETTE 指定需要逻辑调色板PFD_NEED_SYSTEM_PALETTE 指定需要硬件调色板PFD_STERE
15、O NT不支持PFD_SUPPORT_OPENGL 支持OpenGLPFD_SUPPORT_GDI 支持GDI,此时不可使用PFD_DOUBLEBUFFERBYTE iPixelType;像素颜色模式,可选项为PFD_TYPE_RGBA或PFD_TYPE_INDEX,分别对应于RGBA模式和颜色索引模式。BYTE cColorBits;指定颜色的位数。BYTE cRedBits;采用RGBA模式时,红色组分占用位数BYTE cRedShift;采用RGBA模式时,红色组分占偏移量BYTE cGreenBits;采用RGBA模式时,绿色组分占用位数BYTE cGreenShift;采用RGBA模
16、式时,绿色组分偏移量BYTE cBlueBits;BYTE cBlueShift;BYTE cAlphaBits;采用RGBA模式时,Alpha组分占用位数。BYTE cAlphaShift;采用RGBA模式时,Alpha组分偏移量。BYTE cAccumBits;指定累积缓冲区表示一个像素所用位数。BYTE cAccumRedBits;定累积缓冲区表示红色组分占用位数。BYTE cAccumGreenBits;指定累积缓冲区表示绿色组分占用位数。BYTE cAccumBlueBits;指定累积缓冲区表示蓝色组分占用位数。BYTE cAccumAlphaBits;指定累积缓冲区表示Alpha组
17、分占用位数BYTE cDepthBits;指定深度缓冲区表示一个像素所用位数。BYTE cStencilBits;指定模板缓冲区表示一个像素所用位数。BYTE cAuxBuffers;指定辅助缓冲区,Windows9x、NT不支持BYTE iLayerType; Windows9x、NT下只能是PFD_MAIN_PLANE。BYTE bReserved;0DWORD dwLayerMask;指定覆盖层的屏蔽,Windows9x、NT不支持DWORD dwVisibleMask; Windows9x、NT不支持DWORD dwDamageMask; Windows9x、NT不支持 PIXELFO
18、RMATDESCRIPTOR;Fig 1.9 设置像素格式的一般步骤期望的像素格式描述PixelFormatDescriptor枚举或比较像素格式ChoosePixelFormatDescribePixelFormat设置像素格式匹配YesNo1.2.3 0penCL图形处理流程 整个OpenGL的基本工作流程如下图:1.2.4 0penCL图形绘制方式 OpenGL是一个与硬件图形发生器的软件接口,它包括了100多个图形操作函数,开发者可以利用这些函数来构造景物模型、进行三维图形交互软件的开 发。正如上一章所述,OpenGL是一个高性能的图形开发软件包。OpenGL支持网络,在网络系统中用户
19、可以在不同的图形终端上运行程序显示图形。 OpenGL作为一个与硬件独立的图形接口,它不提供与硬件密切相关的设备操作函数,同时,它也不提供描述类似于飞机、汽车、分子形状等复杂形体的图形操 作函数。用户必须从点、线、面等最基本的图形单元开始构造自己的三维模型。当然,象OpenInventor那样更高一级的基于OpenGL的三维图形建 模开发软件包将提供方便的工具。因此OpenGL的图形操作函数十分基本、灵活。例如OpenGL中的模型绘制过程就多种多样,内容十分丰 富,OpenGL提供了以下的对三维物体的绘制方式:网格线绘图方式(wireframe)这种方式仅绘制三维物体的网格轮廓线。深度优先网格
20、线绘图方式(depth_cued)用网格线方式绘图,增加模拟人眼看物体一样,远处的物体比近处的物体要暗些。反走样网格线绘图方式(antialiased)用网格线方式绘图,绘图时采用反走样技术以减少图形线条的参差不齐。平面消隐绘图方式(flat_shade)对模型的隐藏面进行消隐,对模型的平面单元按光照程度进行着色但不进行光滑处理。光滑消隐绘图方式(smooth_shade)对模型进行消隐按光照渲染着色的过程中再进行光滑处理,这种方式更接近于现实。加阴影和纹理的绘图方式(shadows、textures)在模型表面贴上纹理甚至于加上光照阴影,使得三维景观象照片一样。运动模糊的绘图方式(motio
21、n-blured)模拟物体运动时人眼观察所感觉的动感现象。大气环境效果(atmosphere-effects)在三维景观中加入如雾等大气环境效果,使人身临其境。深度域效果(depth-of-effects)类似于照相机镜头效果,模型在聚焦点处清晰,反之则模糊。这些三维物体绘图和特殊效果处理方式,说明OpenGL已经能够模拟比较复杂的三维物体或自然景观,这就是我们所面对的OpenGL。1.2.5 0penGL程序运行方式 运行OpenGL程序主要有以下三种方式:OpenGL硬件加速方式三维图形加速模式纯软件模式OpenGL 函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、
22、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。 从图1可以看出,gl是核心,glu是对gl的部分封装。glx、agl、wgl 是针对不同窗口系统的函数。glut是为跨平台的OpenGL程序的工具包,比aux功能强大。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩 展机制开发的函数。 1.3.1 开发库的组成 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。它采用C语言风格,提供大量的函数来进行图形的处理和显示。OpenGL图形库一共有100多个函数,它们分别属于OpenGL的基本库、实用库、辅助库等不同的库。 OpenGL 全称开放式图形库,是
23、由SGI公司开发的低层三维图形API,目前在图形开发领域已经成为工业标准。现今市面上关于OpenGL方面的书籍不在少数,但是大多是讲解句法和实例,缺乏对其整个程序开发框架的总结与把握,所以总体上显得比较凌乱。本篇文章主要针对初学者(最好要有图形方面的基础知识)而制作的,旨在通过对OpenGL 的整个知识结构的介绍,来具体剖析其内在运行机制,并且结合实际开发经验总结出在VC平台下的OpenGL开发框架,最后给出一个例程来说明这一框架的具体应用。 1.OpenGL核心库OpenGL是一种开放式的图形软件开发包,它采用C语言风格,提供大量的函数来进行图形方面的处理,一般编程使用的函数库包括:Open
24、GL图形库-函数以gl开头,可以实现比较简单的绘制功能,核心函数共115个。这些函数可以运行在现在任何主流操作系统中。OpenGL实用库-函数以glu开头,其函数功能更高级一些,如绘制复杂的曲线曲面、高级坐标变换、多边形分割等,共有43个。这些函数可以运行在现在任何主流操作系统中。OpenGL辅助库-函数以aux开头,它们是一些特殊的函数,包括简单的窗口管理、输入事件处理、某些复杂三维物体绘制等函数,共有31个。它只能在Win32平台下运行。 核心库包含的函数有115个,它们是最基本的函数,其前缀是gl;这部分函数用于常规的、核心的图形处理,由gl.dll来负责解释执行。核心库中的函数可以进一
25、步分为以下几类函数。 1)绘制基本几何图元的函数。 glBegain()、glEnd()、glNormal*()、glVertex*()。(2)矩阵操作、几何变换和投影变换的函数。矩阵入栈函数glPushMatrix(),矩阵出栈函数glPopMatrix(),装载矩阵函数glLoadMatrix(),矩阵相乘函数glMultMatrix(),当前矩阵函数 glMatrixMode()和矩阵标准化函数glLoadIdentity(),几何变换函数glTranslate*()、glRotate*()和glScale*(),投影变换函数glOrtho()、glFrustum()和视口变换函数glV
26、iewport()等等。(3)颜色、光照和材质的函数。如设置颜色模式函数glColor*()、glIndex*(),设置光照效果的函数glLight*() 、glLightModel*()和设置材质效果函数glMaterial()等等。(4)显示列表函数。主要有创建、结束、生成、删除和调用显示列表的函数glNewList()、 glEndList()、glGenLists()、glCallList()和glDeleteLists()等。(5)纹理映射函数。主要有一维纹理函数glTexImage1D()、二维纹理函数glTexImage2D()、 设置纹理参数、纹理环境和纹理坐标的函数glTex
27、Parameter*()、glTexEnv*()和glTetCoord*()等。(6)特殊效果函数。融合函数glBlendFunc()、反走样函数glHint()和雾化效果glFog*()。(7)光栅化、象素操作函数。像素位置glRasterPos*()、线型宽度glLineWidth()、多边形绘制模式glPolygonMode(),读取象素glReadPixel()、复制象素glCopyPixel()等。(8)选择与反馈函数。主要有渲染模式glRenderMode()、选择缓冲区glSelectBuffer()和反馈缓冲区glFeedbackBuffer()等。(9)曲线与曲面的绘制函数。
28、生成曲线或曲面的函数glMap*()、glMapGrid*(),求值器的函数glEvalCoord*() glEvalMesh*()。(10)状态设置与查询函数。主要有glGet*()、glEnable()、glGetError()等。2.OpenGL实用库(OpenGL utility library,GLU),包含的函数功能更高一些,如绘制复杂的曲线曲面、高级坐标变换、多边形分割等,共有43个,前缀为glu。Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。此类函数由glu.dll来负责解释执行。主要包括了以下几种: (1)辅助纹理贴图函数。有gluSca
29、leImage() 、gluBuild1Dmipmaps()、gluBuild2Dmipmaps()等。(2)坐标转换和投影变换函数。定义投影方式函数gluPerspective()、gluOrtho2D() 、gluLookAt(),拾取投影视景体函数gluPickMatrix(),投影矩阵计算gluProject()和 gluUnProject()等。(3)多边形镶嵌工具。有gluNewTess()、 gluDeleteTess()、gluTessCallback()、gluBeginPolygon() gluTessVertex()、gluNextContour()、gluEndPoly
30、gon()等。(4)二次曲面绘制工具。主要有绘制球面、锥面、柱面、圆环面gluNewQuadric()、gluSphere()、gluCylinder()、gluDisk()、gluPartialDisk()、gluDeleteQuadric()等等。(5)非均匀有理B样条绘制工具。主要用来定义和绘制Nurbs曲线和曲面,包括gluNewNurbsRenderer()、gluNurbsCurve()、gluBeginSurface()、gluEndSurface()、gluBeginCurve()、gluNurbsProperty()等函数。(6)错误反馈工具。 获取出错信息的字符串gluEr
31、rorString()等。3. OpenGL辅助库OpenGL辅助库(OpenGL auxiliarylibrary,GLAUX),包括简单的窗口管理、输入事件处理、某些复杂三维物体绘制等函数,共有31个,前缀为aux。此类函数由glaux.dll来负责解释执行。辅助库函数主要包括以下几类。 (1)窗口初始化和退出函数。auxInitDisplayMode()和auxInitPosition()。(2)窗口处理和时间输入函数。auxReshapeFunc()、auxKeyFunc()和auxMouseFunc()。(3)颜色索引装入函数。auxSetOneColor()。(4)三维物体绘制函数
32、。包括了两种形式网状体和实心体,如绘制立方体auxWireCube()和 auxSolidCube()。这里以网状体为例,长方体auxWireBox()、环形圆纹面auxWireTorus()、圆柱auxWireCylinder()、二十面体auxWireIcosahedron()、八面体auxWireOctahedron()、四面体auxWireTetrahedron()、十二面体auxWireDodecahedron()、圆锥体auxWireCone()和茶壶auxWireTeapot()。绘制实心体只要将上述函数中的确Wire更换成Solid就可以了。(5)其他。背景过程管理函数auxI
33、dleFunc();程序运行函数auxMainLoop()。(6)程序运行函数auxMainLoop () 。4、OpenGL工具库(OpenGL Utility Toolkit)包含大约30多个函数,函数名前缀为glut,此函数由glut.dll来负责解释执行。这部分函数主要包括:(1)窗口操作函数窗口初始化、窗口大小、窗口位置等函数glutInit() glutInitDisplayMode()、glutInitWindowSize() glutInitWindowPosition()等。(2)回调函数。响应刷新消息、键盘消息、鼠标消息、定时器函数等,glutDisplayFunc()、g
34、lutPostRedisplay()、 glutReshapeFunc()、glutTimerFunc()、glutKeyboardFunc()、 glutMouseFunc()。(3)创建复杂的三维物体。这些和aux库的函数功能相同。创建网状体和实心体。如glutSolidSphere()、glutWireSphere()等。(4)菜单函数创建添加菜单的函数glutCreateMenu()、glutSetMenu()、glutAddMenuEntry()、glutAddSubMenu() 和glutAttachMenu()。(5)程序运行函数。glutMainLoop()。5.Windows
35、专用库16个WGL函数,专门用于OpenGL和Windows窗口系统的联接,其前缀为wgl,主要用于创建和选择图形操作描述表(renderingcontexts)以及在窗口内任一位置显示字符位图。这类函数主要包括以下几类(1)绘图上下文相关函数。wglCreateContext()、wglDeleteContext()、wglGetCurrentContent()、wglGetCurrentDC() wglDeleteContent()等。(2)文字和文本处理函数。wglUseFontBitmaps()、wglUseFontOutlines()。(3)覆盖层、地层和主平面层处理函数。wglCo
36、pyContext()、wglCreateLayerPlane()、 wglDescribeLayerPlane()、wglReakizeLayerPlatte()等。(4)其他函数。wglShareLists()、wglGetProcAddress()等。6、 Win32 API函数库包含有6个函数,函数名无专用前缀。是win32扩展函数。这部分函数主要用于处理像素存储格式和双帧缓存。这6个函数将替换Windows GDI中原有的同样的函数。Win32API函数库只能用于Windows 95/98/NT环境中。 7、X窗口专用库是针对Unix和Linux的扩展函数。包括渲染上下文、绘制图元、
37、显示列表、纹理贴图、等等初始化 glXQueryExtension()渲染上下文函数, glXCreateContext() glXDestroyContext() glXCopyContext() glXMakeCurrent() glXCreateGLXPixmap()执行 glXWaitGL()、glXWaitX()缓冲区和字体 glXSwapBuffers()、glXUseXFont()8 其他扩展库这 些函数可能是新的OpenGL函数,并没有在标准OpenGL库中实现,或者它们是用来扩展已存在的OpenGL函数的功能。和glu、glx和wgl一 样,这些OpenGL扩展是由硬件厂商和
38、厂商组织开发的。OpenGL扩展(OpenGL Extention)包含了大量的扩展API函数。随 着硬件的更新,硬件厂商首先向SGI申请登记新的扩展,编写规格说明书(specification)。然后按照说明书进行开发扩展程序。不同的 OpenGL实现(OpenGL Implementation)支持的扩展可能不一样,只有随着某一扩展的推广与应用以及硬件技术的提高该扩展才会在所有的OpenGL实现中被给予支 持,从而最终成为OpenGL标准库的一部分。扩展由SGI维护,在SGI网站上列出了目前公开的已注册的扩展及其官方说明书。扩展源由扩展函数的后缀来指明(或使用扩展常量后缀)。例如,后缀WI
39、N表明一个符合Windows规范的扩展,EXT或ARB后缀表明该扩展由多个卖主定义。1.3.2 基本数据类型 与C语言相对应,OpenGL中也有整数、字节、浮点数等数据类型,为了说明两者的对应关系,下表将OpenGL的数据类型与相应的C类型进行了对比:前缀 数据类型 相应C语言类型 OpenGL类型b 8-bit integer signed char GLbytes 16-bit integer short GLshorti 32-bit integer long GLint,GLsizeif 32-bit floating-point float GLfloat,GLclampfd 64-
40、bit floating-point double GLdouble,GLclampdub 8-bit unsigned integer unsigned char GLubyte,GLbooleanus 16-bit unsigned integer unsigned short GLushortui 32-bit unsigned integer unsigned long GLuint,GLenum,GLbitfield此外,OpenGL也定义GLvoid类型,如果用C语言编写,可以用它替代void类型。1.3.3 0penGL库函数命名规则 了解了OpenGL的数据类型,让我们再回过头
41、来看看OpenGL库函数的命名规律。所有OpenGL函数采用了以下格式:库前缀有gl、glu、aux、glut、wgl、glx等等,分别表示该函数属于OpenGL某开发库等,从函数名后面中还可以看出需要多少个参数以及参数的类型。I代表int型,f代表float型,d代表double型,u代表无符号整型。注意,有的函数参数类型后缀前带有数字2、3、4。2代表二维,3代表三维,4代表alpha值(以后介绍)。有些OpenGL函数最后带一个字母v,表示函数参数可用一个指针指向一个向量(或数组)来替代一系列单个参数值。下面两种格式都表示设置当前颜色为红色,二者等价。glColor3f(1.0,0.0,0.0);等价于:float color_array=1.0,0.0,0.0;glColor3fv(color_array);除了以上基本命名方式外,还有一种带*星号的表示方法,例如glColor*(),它表示可以用函数的各种方式来设置当前颜色。同理,glVertex*v()表示用一个指针指向所有类型的向量来定义一系列顶点坐标值。1.4 基于OpenGL的高层图形库 略1.5 OpenGL应用程序框架 Win32控制台程序框架(1)创建一个新工程(2)设置包含文件和库文件路径(3)加入OpenGL库P25 Program/P25#include #include #includ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院医疗质量安全管理制度
- 医院精神文明建设制度
- 作了健康宣教
- 墨蓝简约工作计划模板
- 思想品德八年级上册第一单元第一课第二框的教学设计教学设计1
- 2026年皮肤病理试题(附答案)
- 2026年辽宁省高级档案职称考试(档案学概论)题库含答案详解
- 2026年公司、项目部、各个班组安全培训试题及答案预热题
- 岗位绩效考核表月度评估
- 2026年物流信息化系统应用考试试卷及答案
- 川大拔尖计划试题及答案
- 国家能源集团陆上风电项目通 用造价指标(2024年)
- 2023新能源集控中心建设可行性研究报告
- 现代城市商业综合体规划设计
- 荆防颗粒课件介绍
- 财务共享服务业务处理(全 ) 教案
- 保密协议(中英文对照)
- 【生物】全册教案 2023-2024学年人教版八年级生物下册
- 挂篮施工及安全控制连续梁施工安全培训课件
- 审计国际化进程中的问题及对策
- 第四章组合逻辑电路中的竞争冒险
评论
0/150
提交评论