基于OpenGL三维图形的开发

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OpenGL程序基本结构为定义窗口、清理 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); auxInitDisplayMode(AUX_SINGLE|AUX_RGBA); auxInitPosition(0,0,500,500); auxInitWindow("simple"); #include <GL/glaux.h> #include "glos.h"
Windows环境下的OpenGL
Windows下的OpenGL函数 函数都按一定的格式来命名,即每个 函数都以gl开头。Windows 下的OpenGL 相应函数(宋5号) 具体说明 除了具有基本的OpenGL函数外,还支持 其他四类函数 43个函数,每个函数以glu开头。 OpenGL实用库
用户必须从点、线、面等最基本的图形单 元开始构造自己的三维模型
OpenGL提供了以下的对三维物体的绘制 方式:
网格线绘图方式(wireframe):这种方式仅绘制三维物体的网格轮廓 线。 深度优先网格线绘图方式(depth_cued):用网格线方式绘图,增加 模拟人眼看物体一样,远处的物体比近处的物体要暗些。 反走样网格线绘图方式(antialiased):用网格线方式绘图,绘图时采 用反走样技术以减少图形线条的参差不齐。 平面消隐绘图方式(flat_shade):对模型的隐藏面进行消隐,对模型 的平面单元按光照程度进行着色但不进行光滑处理。
Windows 下OpenGL的结构
OpenGL的作用机制是客户(client)/服务器(sever)机制,即客户 (用OpenGL绘制景物的应用程序)向服务器(即OpenGL内核)发 布OpenGL命令,服务器则解释这些命令。
正象Windows的图形设备接口(GDI)把图形函数库封装在一个动态 链接库(Windows NT下的GDI32.DLL)内一样,OpenGL图形库也 被封装在一个动态链接库内(OPENGL32.DLL)。 受客户应用程序调用的OpenGL函数都先在OPENGL32.DLL中处理, 然后传给服务器WINSRV.DLL。OpenGL的命令再次得到处理并且直 接传给Win32的设备驱动接口(Device Drive Interface,DDI),这样 就把经过处理的图形命令送给视频显示驱动程序。
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。
大气环境效果(atmosphere-effects):在三维景观中加入如雾等大 气环境效果,使人身临其境。
深度域效果(depth-of-effects):类似于照相机镜头效果,模型在聚 焦点处清晰,反之则模糊。
OpenGL的基本工作流程
OpenGL图形操作步骤
在OpenGL中进行主要的图形操作直至在计算机屏幕上渲染绘制出三 维图形景观的基本步骤: 1)根据基本图形单元建立景物模型,并且对所建立的模型进行数学 描述(OpenGL中把:点、线、多边形、图像和位图都作为基本图形 单元)。 2)把景物模型放在三维空间中的合适的位置,并且设置视点 (viewpoint)以观察所感兴趣的景观。 3)计算模型中所有物体的色彩,其中的色彩根据应用要求来确定, 同时确定光照条件、纹理粘贴方式等。 4)把景物模型的数学描述及其色彩信息转换至计算机屏幕上的象素, 这个过程也就是光栅化(rasterization)。
辅助库
窗口初始化和退出 void auxInitWindow(GLbyte *titleString) 打开一个由auxInitDisplayMode()和 auxInitPosition()指定的窗口。函数参数是 窗口标题,窗口背景缺省颜色是RGBA下的 黑色或颜色表(color_index)下的0号调色 板的颜色。按下Escape键可以完成关掉窗 口、结束程序、全部清屏三项功能。
void auxInitPosition(GLint x,GLinty,GLsizei width,GLsizei height)
设置窗口位置及大小。参数(x, y)为窗口 的左上角点的屏幕坐标,参数(width, height)为 窗口的宽度和高度,单位为象素,缺省值为(0, 0, 100, 100)。
双缓存动画(Double Buffering):双缓存即前台缓存和 后台缓存,简而言之,后台缓存计算场景、生成画面,前 台缓存显示后台缓存已画好的画面。此外,利用OpenGL 还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等特殊效果。从而实现了消隐算法。
OpenGL提供直观的三维图形开发环境
纹理映射(Texture Mapping):利用OpenGL纹理映射功能可以十分 逼真地表达物体表面细节。 位图显示和图象增强:图象功能除了基本的拷贝和像素读写外,还提 供融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图 象效果处理。以上三条可是被仿真物更具真实感,增强图形显示的效 果。
光滑消隐绘图方式(smooth_shade):对模型进行消隐按光照渲染着 色的过程中再进行光滑处理,这种方式更接近于现实。 加阴影和纹理的绘图方式(shadows、textures):在模型表面贴上 纹理甚至于加上光照阴影,使得三维景观象照片一样 运动模糊的绘图方式(motion-blured):模拟物体运动时人眼观察所 感觉的动感现象。
glFlush(); _sleep(1000);
}
O源自文库enGL的基本使用
OpenGL是一个开放的系统,它是独立于任何窗 口系统或操作系统的。尽管它包含了许多图形函 数,但它却没有窗口函数,也没有从键盘和鼠标 读取事件的函数,所以要初学者写出一个完整的 图形程序是相当困难的。另外,OpenGL图形函 数中只提供基本的几何原形:点、线、多边形, 因此要创建基本的三维几何体如球、锥体等,也 很不容易。 而OpenGL辅助库就是为解决这些基本问题专门 设计的,它提供了一些基本的窗口管理函数和三 维图形绘制函数,能帮助初学者尽快进入 OpenGL世界,掌握关键的三维图形技术
OpenGL提供直观的三维图形开发环境 OpenGL提供了十分清晰明了的图形函数 OpenGL强有力的图形函数不要求开发者 把三维物体模型的数据写成固定的数据格 式 OpenGL在硬件、窗口、操作系统方面是 相互独立的。
OpenGL实现机制
OpenGL是一个与硬件图形发生器的软件接 口,它包括了100多个图形操作函数,开发 者可以利用这些函数来构造景物模型、进 行三维图形交互软件的开发。
纹理映射:三维景物因缺少景物的具体细节而显得不够真 实,为了更加逼真地表现三维景物,OpenGL提供了纹理 映射的功能。OpenGL提供的一系列纹理映射函数使得开 发者可以十分方便地把真实图象贴到景物的多边形上,从 而可以在视窗内绘制逼真的三维景观。 实时动画:为了获得平滑的动画效果,需要先在内存中生 成下一幅图象,然后把已经生成的图象从内存拷贝到屏幕 上,这就是OpenGL的双缓存技术(double buffer)。 OpenGL提供了双缓存技术的一系列函数。 交互技术:目前有许多图形应用需要人机交互,OpenGL提 供了方便的三维图形人机交互接口,用户可以选择修改三 维景观中的物体。
基于OpenGL三维图形的开发
OpenGL特点及功能
OpenGL实际上是一个开放的三维图形软 件包,它独立于窗口系统和操作系统,以 它为基础开发的应用程序可以十分方便地 在各种平台间移植 OpenGL使用简便,效率高
建模:OpenGL图形库除了提供基本的点、线、多边形的绘制函数外, 还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线 和曲面绘制函数。 变换:OpenGL图形库的变换包括基本变换和投影变换。基本变换有平 移、旋转、变比镜像四种变换,投影变换有平行投影(又称正射投影) 和透视投影两种变换。 颜色模式设置:OpenGL颜色模式有两种,即RGBA模式和颜色索引 (Color Index)。 光照和材质设置:OpenGL光有辐射光(Emitted Light)、环境光 (Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质是用光反射率来表示。场景(Scene)中物体最终反映 到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形 成的颜色。
颜色模式的指定:OpenGL应用了一些专门的函数来指定三维模型的颜色。程 序员可以选择二个颜色模式,即RGBA模式和颜色表模式。在RGBA模式中, 颜色直接由RGB值来指定;在颜色表模式中,颜色值则由颜色表中的一个颜 色索引值来指定。程序员还可以选择平面着色和光滑着色二种着色方式对整 个三维景观进行着色。 光照应用:用OpenGL绘制的三维模型必须加上光照才能更加与客观物体相似。 OpenGL提供了管理四种光(辐射光、环境光、镜面光和漫反射光)的方法, 另外还可以指定模型表面的反射特性。 图象效果增强:OpenGL提供了一系列的增强三维景观的图象效果的函数,这 些函数通过反走样、混合和雾化来增强图象的效果。反走样用于改善图象中 线段图形的锯齿而更平滑,混合用于处理模型的半透明效果,雾使得影像从 视点到远处逐渐褪色,更接近于真实。 位图和图象处理:OpenGL还提供了专门对位图和图象进行操作的函数。
OpenGL具体功能
模型绘制:OpenGL能够绘制点、线和多边形。应用这些基 本的形体,我们可以构造出几乎所有的三维模型。 OpenGL通常用模型的多边形的顶点来描述三维模型。如 何通过多边形及其顶点来描述三维模型,在指南的在后续 章节会有详细的介绍。 模型观察:在建立了三维景物模型后,就需要用OpenGL描 述如何观察所建立的三维模型。观察三维模型是通过一系 列的坐标变换进行的。模型的坐标变换在使观察者能够在 视点位置观察与视点相适应的三维模型景观。在整个三维 模型的观察过程中,投影变换的类型决定观察三维模型的 观察方式,不同的投影变换得到的三维模型的景象也是不 同的。最后的视窗变换则对模型的景象进行裁剪缩放,即 决定整个三维模型在屏幕上的图象。
OpenGL辅助库 Windows专用库函数 (WGL) Win32 API函数 31个函数,每个函数以aux开头。 6个函数,每个函数以wgl开头。 5个函数,函数前面没有专用前缀。
OpenGL基本程序结构 #include <GL/gl.h>
OpenGL是一个丰富的三维图形函数库, 编写OpenGL程序并非难事,只需在基本C void main(void) { 语言中调用这些函数
窗口处理和事件输入
当窗口创建后,且在进入主函数循环之前,应当登记以下 列出的回调函数(callback function):
void auxReshapeFunc(void(*function)(GLsizei,GLsizei))
定义窗口改变时形状重定函数。参数function是一个函数 指针,这个函数带有两个参数,即窗口改变后的新宽度和 新高度。通常,function是glViewport(),显示裁减后的新 尺寸,重定义投影矩阵,以便使投影后图像的比例与视点 匹配,避免比例失调。若不调用auxReshapeFunc(),缺 省重定物体形状的函数功能是调用一个二维的正射投影矩 阵。运用辅助库,窗口将在每个事件改变后自动重新绘制。
相关文档
最新文档