OpenGL南Word文档下载推荐.docx
《OpenGL南Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《OpenGL南Word文档下载推荐.docx(39页珍藏版)》请在冰豆网上搜索。
*OpenGL提供一系列的三维图形单元供开发者调用。
*OpenGL提供一系列的图形变换函数。
*OpenGL提供一系列的外部设备访问函数,使开发者可以方便地访问鼠标、键盘、空间球、数据手套等这种直观的三维图形开发环境体现了OpenGL的技术优势,这也是许多三维图形开发者热衷于OpenGL的缘由所在。
1.3、OpenGL成为目前三维图形开发标准
OpenGL成为目前三维图形开发标准在计算机发展初期,人们就开始从事计算机图形的开发。
直到计算机硬软件和计算机图形学高度发达的九十年代,人们发现复杂的数据以视觉的形式表现时是最易理解的,因而三维图形得以迅猛发展,于是各种三维图形工具软件包相继推出,如PHIGS、PEX、RenderMan等。
这些三维图形工具软件包有些侧重于使用方便,有些侧重于渲染效果或与应用软件的连接,但没有一种三维工具软件包在交互式三维图形建模能力、外部设备管理以及编程方便程度上能够OpenGL相比拟。
OpenGL经过对GL的进一步发展,实现二维和三维的高级图形技术,在性能上表现得异常优越,它包括建模、变换、光线处理、色彩处理、动画以及更先进的能力,如纹理影射、物体运动模糊等。
OpenGL的这些能力为实现逼真的三维渲染效果、建立交互的三维景观提供了优秀的软件工具。
OpenGL在硬件、窗口、操作系统方面是相互独立的。
许多计算机公司已经把OpenGL集成到各种窗口和操作系统中,其中操作系统包括UNIX、WindowsNT、DOS等,窗口系统有X窗口、Windows等。
为了实现一个完整功能的图形处理系统,设计一个与OpenGL相关的系统结构为:
其最底层是图形硬件,第二层为操作系统,第三层为窗口系统,第四层为OpenGL,第五层为应用软件。
OpenGL是网络透明的,在客户—服务器(Client-Server)体系结构中,OpenGL允许本地和远程绘图。
所以在网络系统中,OpenGL在X窗口、Windows或其它窗口系统下都可以以一个独立的图形窗口出现。
OpenGL作为一个性能优越的图形应用程序设计界面(API)而适合于广泛的计算环境,从个人计算机到工作站和超级计算机,OpenGL都能实现高性能的三维图形功能。
由于许多在计算机界具有领导地位的计算机公司纷纷采用OpenGL作为三维图形应用程序设计界面,OpenGL应用程序具有广泛的移植性。
因此,OpenGL已成为目前的三维图形开发标准,是从事三维图形开发工作的技术人员所必须掌握的开发工具。
【上页】【下页】【打印】【关闭】
页首·
目录·
报错·
后退
[字号:
大·
中·
小]?
?
OpenGL基础图形编程-OpenGL概念建立出处:
中国游戏开发者[2001-09-21]作者:
目录
2.1OpenGL基本理解
2.2OpenGL工作流程
2.3OpenGL图形操作步骤
2.1、OpenGL基本理解
OpenGL是一个与硬件图形发生器的软件接口,它包括了100多个图形操作函数,开发者可以利用这些函数来构造景物模型、进行三维图形交互软件的开发。
正如上一章所述,OpenGL是一个高性能的图形开发软件包。
OpenGL支持网络,在网络系统中用户可以在不同的图形终端上运行程序显示图形。
OpenGL作为一个与硬件独立的图形接口,它不提供与硬件密切相关的设备操作函数,同时,它也不提供描述类似于飞机、汽车、分子形状等复杂形体的图形操作函数。
用户必须从点、线、面等最基本的图形单元开始构造自己的三维模型。
当然,象OpenInventor那样更高一级的基于OpenGL的三维图形建模开发软件包将提供方便的工具。
因此OpenGL的图形操作函数十分基本、灵活。
例如OpenGL中的模型绘制过程就多种多样,内容十分丰富,OpenGL提供了以下的对三维物体的绘制方式:
*网格线绘图方式(wireframe)
这种方式仅绘制三维物体的网格轮廓线。
*深度优先网格线绘图方式(depth_cued)
用网格线方式绘图,增加模拟人眼看物体一样,远处的物体比近处的物体要暗些。
*反走样网格线绘图方式(antialiased)
用网格线方式绘图,绘图时采用反走样技术以减少图形线条的参差不齐。
*平面消隐绘图方式(flat_shade)
对模型的隐藏面进行消隐,对模型的平面单元按光照程度进行着色但不进行光滑处理。
*光滑消隐绘图方式(smooth_shade)
对模型进行消隐按光照渲染着色的过程中再进行光滑处理,这种方式更接近于现实。
*加阴影和纹理的绘图方式(shadows、textures)
在模型表面贴上纹理甚至于加上光照阴影,使得三维景观象照片一样。
*运动模糊的绘图方式(motion-blured)
模拟物体运动时人眼观察所感觉的动感现象。
*大气环境效果(atmosphere-effects)
在三维景观中加入如雾等大气环境效果,使人身临其境。
*深度域效果(depth-of-effects)
类似于照相机镜头效果,模型在聚焦点处清晰,反之则模糊。
这些三维物体绘图和特殊效果处理方式,说明OpenGL已经能够模拟比较复杂的三维物体或自然景观,这就是我们所面对的OpenGL。
2.2、OpenGL工作流程
整个OpenGL的基本工作流程如下图:
图2-1OpenGL基本工作流程
其中几何顶点数据包括模型的顶点集、线集、多边形集,这些数据经过流程图的上部,包括运算器、逐个顶点操作等;
图像数据包括象素集、影像集、位图集等,图像象素数据的处理方式与几何顶点数据的处理方式是不同的,但它们都经过光栅化、逐个片元(Fragment)处理直至把最后的光栅数据写入帧缓冲器。
在OpenGL中的所有数据包括几何顶点数据和象素数据都可以被存储在显示列表中或者立即可以得到处理。
OpenGL中,显示列表技术是一项重要的技术。
OpenGL要求把所有的几何图形单元都用顶点来描述,这样运算器和逐个顶点计算操作都可以针对每个顶点进行计算和操作,然后进行光栅化形成图形碎片;
对于象素数据,象素操作结果被存储在纹理组装用的内存中,再象几何顶点操作一样光栅化形成图形片元。
整个流程操作的最后,图形片元都要进行一系列的逐个片元操作,这样最后的象素值BZ送入帧缓冲器实现图形的显示。
2.3、OpenGL图形操作步骤
在上一节中说明了OpenGL的基本工作流程,根据这个流程可以归纳出在OpenGL中进行主要的图形操作直至在计算机屏幕上渲染绘制出三维图形景观的基本步骤:
1)根据基本图形单元建立景物模型,并且对所建立的模型进行数学描述(OpenGL中把:
点、线、多边形、图像和位图都作为基本图形单元)。
2)把景物模型放在三维空间中的合适的位置,并且设置视点(viewpoint)以观察所感兴趣的景观。
3)计算模型中所有物体的色彩,其中的色彩根据应用要求来确定,同时确定光照条件、纹理粘贴方式等。
4)把景物模型的数学描述及其色彩信息转换至计算机屏幕上的象素,这个过程也就是光栅化(rasterization)。
在这些步骤的执行过程中,OpenGL可能执行其他的一些操作,例如自动消隐处理等。
另外,景物光栅化之后被送入帧缓冲器之前还可以根据需要对象素数据进行操作。
【上页】【下页】【打印】【关闭】
OpenGL基础图形编程-WindowsNT环境下的OpenGL出处:
中国游戏开发者[2001-09-23]作者:
3.1OpenGL的函数
3.2OpenGL基本功能
3.3OpenGL的结构
3.1、WindowsNT下的OpenGL函数
如前面的章节所述,WindowsNT下的OpenGL同样包含100多个库函数,这些函数都按一定的格式来命名,即每个函数都以gl开头。
WindowsNT下的OpenGL除了具有基本的OpenGL函数外,还支持其他四类函数:
相应函数具体说明OpenGL实用库43个函数,每个函数以glu开头。
OpenGL辅助库31个函数,每个函数以aux开头。
Windows专用库函数(WGL)6个函数,每个函数以wgl开头。
Win32API函数5个函数,函数前面没有专用前缀。
表2-1
在OpenGL中有115个核心函数,这些函数是最基本的,它们可以在任何OpenGL的工作平台上应用。
这些函数用于建立各种各样的形体,产生光照效果,进行反走样以及进行纹理映射,进行投影变换等等。
由于这些核心函数有许多种形式并能够接受不同类型的参数,实际上这些函数可以派生出300多个函数。
OpenGL的实用函数是比OpenGL核心函数更高一层的函数,这些函数是通过调用核心函数来起作用的。
这些函数提供了十分简单的用法,从而减轻了开发者的编程负担。
OpenGL的实用函数包括纹理映射、坐标变换、多边形分化、绘制一些如椭球、圆柱、茶壶等简单多边形实体(本指南将详细讲述这些函数的具体用法)等。
这部分函数象核心函数一样在任何OpenGL平台都可以应用。
OpenGL的辅助库是一些特殊的函数,这些函数本来是用于初学者做简单的练习之用,因此这些函数不能在所有的OpenGL平台上使用,在WindowsNT环境下可以使用这些函数。
这些函数使用简单,它们可以用于窗口管理、输入输出处理以及绘制一些简单的三维形体。
为了使OpenGL的应用程序具有良好的移植性,在使用OpenGL辅助库的时候应谨慎。
6个WGL函数是用于连接OpenGL与WindowsNT的,这些函数用于在WindowsNT环境下的OpenGL窗口能够进行渲染着色,在窗口内绘制位图字体以及把文本放在窗口的某一位置等。
这些函数把Windows与OpenGL揉合在一起。
最后的5个Win32函数用于处理象素存储格式和双缓冲区,显然这些函数仅仅能够用于Win32系统而不能用于其它OpenGL平台。
3.2、OpenGL基本功能
OpenGL能够对整个三维模型进行渲染着色,从而绘制出与客观世界十分类似的三维景象。
另外OpenGL还可以进行三维交互、动作模拟等。
具体的功能主要有以下这些内容。
*模型绘制
OpenGL能够绘制点、线和多边形。
应用这些基本的形体,我们可以构造出几乎所有的三维模型。
OpenGL通常用模型的多边形的顶点来描述三维模型。
如何通过多边形及其顶点来描述三维模型,在指南的在后续章节会有详细的介绍。
*模型观察
在建立了三维景物模型后,就需要用OpenGL描述如何观察所建立的三维模型。
观察三维模型是通过一系列的坐标变换进行的。
模型的坐标变换在使观察者能够在视点位置观察与视点相适应的三维模型景观。
在整个三维模型的观察过程中,投影变换的类型决定观察三维模型的观察方式,不同的投影变换得到的三维模型的景象也是不同的。
最后的视窗变换则对模型的景象进行裁剪缩放,即决定整个三维模型在屏幕上的图象。
*颜色模式的指定
OpenGL应用了一些专门的函数来指定三维模型的颜色。
程序员可以选择二个颜色模式,即RGBA模式和颜色表模式。
在RGBA模式中,颜色直接由RGB值来指定;
在颜色表模式中,颜色值则由颜色表中的一个颜色索引值来指定。
程序员还可以选择平面着色和光滑着色二种着色方式对整个三维景观进行着色。
*光照应用
用OpenGL绘制的三维模型必须加上光照才能更加与客观物体相似。
OpenGL提供了管理四种光(辐射光、环境光、镜面光和漫反射光)的方法,另外还可以指定模型表面的反射特性。
*图象效果增强
OpenGL提供了一系列的增强三维景观的图象效果的函数,这些函数通过反走样、混合和雾化来增强图象的效果。
反走样用于改善图象中线段图形的锯齿而更平滑,混合用于处理模型的半透明效果,雾使得影像从视点到远处逐渐褪色,更接近于真实。
*位图和图象处理
OpenGL还提供了专门对位图和图象进行操作的函数。
*纹理映射
三维景物因缺少景物的具体细节而显得不够真实,为了更加逼真地表现三维景物,OpenGL提供了纹理映射的功能。
OpenGL提供的一系列纹理映射函数使得开发者可以十分方便地把真实图象贴到景物的多边形上,从而可以在视窗内绘制逼真的三维景观。
*实时动画
为了获得平滑的动画效果,需要先在内存中生成下一幅图象,然后把已经生成的图象从内存拷贝到屏幕上,这就是OpenGL的双缓存技术(doublebuffer)。
OpenGL提供了双缓存技术的一系列函数。
*交互技术
目前有许多图形应用需要人机交互,OpenGL提供了方便的三维图形人机交互接口,用户可以选择修改三维景观中的物体。
3.3、WindowsNT下OpenGL的结构
OpenGL的作用机制是客户(client)/服务器(sever)机制,即客户(用OpenGL绘制景物的应用程序)向服务器(即OpenGL内核)发布OpenGL命令,服务器则解释这些命令。
大多数情况下,客户和服务器在同一机器上运行。
正是OpenGL的这种客户/服务器机制,OpenGL可以十分方便地在网络环境下使用。
因此WindowsNT下的OpenGL是网络透明的。
正象Windows的图形设备接口(GDI)把图形函数库封装在一个动态链接库(WindowsNT下的GDI32.DLL)内一样,OpenGL图形库也被封装在一个动态链接库内(OPENGL32.DLL)。
受客户应用程序调用的OpenGL函数都先在OPENGL32.DLL中处理,然后传给服务器WINSRV.DLL。
OpenGL的命令再次得到处理并且直接传给Win32的设备驱动接口(DeviceDriveInterface,DDI),这样就把经过处理的图形命令送给视频显示驱动程序。
下图简要说明这个过程:
图3-1OpenGL在WindowsNT下运行机制
在三维图形加速卡的GLINT图形加速芯片的加速支持下,二个附加的驱动程序被加入这个过程中。
一个OpenGL可安装客户驱动程序(InstallableClientDriver,ICD)被加在客户这一边,一个硬件指定DDI(Hardware-specificDDI)被加在服务器这边,这个驱动程序与Wind32DDI是同一级别的。
图3-2在三维图形加速下OpenGL运行机制【上页】【下页】【打印】【关闭】
OpenGL基础图形编程-OpenGL基本程序结构出处:
中国游戏开发者[2001-09-25]作者:
用OpenGL编写的程序结构类似于用其他语言编写的程序。
实际上,OpenGL是一个丰富的三维图形函数库,编写OpenGL程序并非难事,只需在基本C语言中调用这些函数,用法同TurboC、MicrosoftC等类似,但也有许多不同之处。
本指南所有的程序都是在WindowsNT的MicrosoftVisualC++集成环境下编译连接的,其中有部分头文件和函数是为这个环境所用的,例如判别操作系统的头文件“glos.h”。
此外,为便于各类读者同时快速入门,在短时间内掌握OpenGL编程的基本方法和技巧,指南中例子尽量采用标准ANSIC调用OpenGL函数来编写,而且所有例程都只采用OpenGL附带的辅助库中的窗口系统。
此外,这样也便于程序在各平台间移植,尤其往工作站UNIX操作系统移植时,也只需改动头文件等很少很少的部分。
下面列出一个简单的OpenGL程序:
例4-1OpenGL简单例程(Simple.c)
#include<
GL/gl.h>
GL/glaux.h>
#include"
glos.h"
voidmain(void)
{
auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
auxInitPosition(0,0,500,500);
auxInitWindow("
simple"
);
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,0.0,0.0);
glRectf(-0.5,-0.5,0.5,0.5);
glFlush();
_sleep(1000);
}
这个程序运行结果是在屏幕窗口内画一个红色的方块。
下面具体分析整个程序结构:
首先,在程序最开始处是OpenGL头文件:
<
、<
。
前一个是gl库的头文件,后一个是辅助库的头文件。
此外,在以后的几章中还将说明OpenGL的另外两个头文件,一个是<
GL/glu.h>
实用库的头文件,另一个是<
GL/glx.h>
X窗口扩充库的头文件(这个常用在工作站上)。
接下来是主函数main()的定义:
一般的程序结构是先定义一个窗口:
auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
auxInitPosition(0,0,500,500);
auxInitWindow("
auxInitDisplayMode(AUX_SINGLE|AUX_RGBA)设置窗口显示模式为RGBA方式,即彩色方式,并且图形缓存为单缓存(SINGLEBUFFER)。
auxInitPosition(0,0,500,500)定义窗口的初始位置,前两个参数(0,0)为窗口的左上角点的屏幕坐标,后两个参数(500,500)为窗口的宽度和高度。
auxInitWindow("
)是窗口初始化,字符参数是窗口名称。
然后是窗口内清屏:
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
第一句将窗口清为黑色,第二句将颜色缓冲区清为glClearColor(0.0,0.0,0.0,0.0)命令所设置的颜色,即同窗口背景颜色一致。
再接着是在窗口内画一个物体:
glColor3f(1.0,0.0,0.0);
glRectf(-0.5,-0.5,0.5,0.5);
很明显,第一句设置物体颜色,函数中前三个参数分别为R、G、B值,最后一个参数是Alpha值,范围都从0至1;
第二句绘制一个二维矩形。
注意:
OpenGL是针对三维图形而言,因此用作OpenGL编程绘制物体必须意识到任何一个物体都是三维的,具有空间性,而显示于屏幕上的物体都是三维物体在二维平面上的投影。
从表面上看,上述程序代码很简单,实际上已经用到了缺省的投影形式(正射投影)。
再看glFlush()函数,表示强制绘图完成。
最后一句_sleep(1000),参数单位为毫秒,整句意思是保持现有状况一秒钟,然后结束程序运行。
这个函数是VC++的库函数。
总而言之,OpenGL程序基本结构为定义窗口、清理窗口、绘制物体、结束运行。
OpenGL基础图形编程-OpenGL数据类型和函数名出处:
中国游戏开发者[2001-09-27]作者:
OpenGL的数据类型定义可以与其它语言一致,但建议在ANSIC下最好使用以下定义的数据类型,例如GLint、GLfloat等。
具体类型见表5-1。
前缀数据类型相应C语言类型OpenGL类型b8-bitintegersignedcharGLbytes16-bitintegershortGLshorti32-bitintegerlongGLint,GLsizeif32-bitfloating-pointfloatGLfloat,GLclampfd64-bitfloating