基于OpenGL的纹理映射技术

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:liuchun9876
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:自然景物的模拟是近年来计算机图形学中具有挑战性的研究方向之一。OpenGL技术是实现真实感图形模拟的重要方法之一。本文使用OpenGL的编程接口,应用纹理映射技术,实现了三维场景的真实模拟。纹理映射技术的应用能增强三维场景绘制的真实感,并能提高三维场景的渲染速度。
  关键词:OpenGL;纹理映射;三维场景
  中图分类号:TP301文献标识码:A文章编号:1009-3044(2007)03-10812-02
  
  1 引言
  
  纹理映射技术产生上个世纪七十年代,是模拟自然景物表面细节的一种有效方法,在生成真实感图形中得到了大量的应用。在过去的几十年中,人们一直通过建模的方法仿真客观世界,由于客观世界千变万化、错综复杂,要把客观世界的各种细微结构直接用几何模型表示出来,不仅模型难以建立,而且计算量庞大,难以满足实时显示的要求。因此,在实际应用中,为了获得比较高的显示速度,往往以牺牲图形的真实感为代价。尽管这样,显示一幅较复杂的图形往往需要好几个小时,并且能满足实时性要求的几何模型一直没有找到。于是,人们就想象是否可以用“贴”墙纸的方法将反映物体表面细节的图案贴到物体表面上,从而开辟了一个新的研究领域——纹理映射(texture mapping)。
  
  2 OpenGL简述
  
  OpenGL是由SGI公司推出的独立于操作系统和硬件环境的开放式三维图形库,作为一种用于实时3D图形的工业标准API(Application Programmin Interface)已经得到了广泛的认可和接受。
  OpenGL提供了155个图形函数,开发人员可以利用这些函数来构造景物模型,开发三维图形实时交互软件。OpenGL具有强大的图形功能和良好的跨平台移植能力,目前已被广泛应用于可视化技术、实体造型、CAD/CAM、模拟仿真等诸多领域。
  纹理映射技术是OpenGL的一个重要的技术,在进行模型转换和投影转换都能执行操作,可用到所有的图元:点、线、多边形、位图和图像上。
  
  3 纹理的定义和分类
  
  我们可以从自然角度、运算角度及分析角度分别给出纹理的定义:
  从自然角度来看,纹理是在某一确定的图象区域中,以近乎周期的种类和方式重复其自身的局部基本模式元。这一定义由Pratt給出,它适合应用于确定类型的线条模式。
  基于运算角度,纹理是在某一运算表达式规定下,为近乎不变或者近乎周期性的数量表达。此定义由Sklansky给出,它适合于根据数学的分析方法抽取纹理特征以实现纹理区域分类的应用领域。
  基于分析角度,纹理为一个宏观的图象区域,其结构可以简单地归结为一些重复性的模式,这些模式的基本模式元依据确定的规则排列,f=R(e),式中,R为关系,e为基本模式元,f为纹理。
  从上述三个不同形式的定义中,我们可以看出:人们无法依据一个关于纹理的完整的形式化定义来工作,必须根据具体的情况来决定使用那种纹理分析方法。
  根据纹理定义域的不同,纹理可分为一维纹理、二维纹理和三维纹理;基于纹理的表现形式,纹理可又分为颜色纹理、几何纹理和过程纹理三大类。
  颜色纹理是通过颜色色彩或明暗度的变化体现出来的表面细节,它在光滑表面上描绘附加定义的花纹或图案,例如大理石墙面、墙上贴的字画、器皿上的图案等都可用颜色纹理来模拟,如图1(a)所示。
  图1 颜色纹理、几何纹理与过程纹理
  几何纹理是指基于景物表面微观几何形状的表面纹理,它是根据粗糙表面的光反射原理,通过一个扰动函数扰动物体表面参数,使表面呈现出凹凸不平的形状,又称为粗糙纹理,如桔子、树干、岩石、山脉等表面呈现的凹凸不平的纹理细节,如图1(b)所示。而过程纹理则表现了各种规则或不规则的动态变化的自然景象,如水波、云、火、烟雾等,图1(c)为一块云的过程纹理。
  
  4 纹理映射的概念
  
  纹理映射技术是指将一个纹理函数映射到三维物体表面来模拟景物的表面细节,是真实感图形生成的有效途径。
  一般来说,二维纹理定义在一平面区域内,它可以用数学函数解析地表示,亦可以用各种数字化图像来离散定义。这样,该平面区域上的每一点处,均定义有一灰度值或颜色值。我们称该平面区域为纹理空间。在图形绘制时,应用纹理映射方法可方便地确定景物表面上任一可见点P在纹理空间中的对应位置(u,v),而(u,v)处所定义的纹理值或颜色值即描述了景物表面在P点处的某种纹理属性,如表面法向量、漫反射系数等。
  以二维纹理为例,其关键点是建立物体空间坐标(x,y,z)与纹理空间坐标(s,t)之间的对应关系,用函数来描述即为:
  在(1)式中T表示纹理空间,O表示景物空间。例如将一块木柴纹理映射到一个立方体上,其结果如图2所示:
  图2 将一块木板纹理映射到由立方体上来模拟木箱
  
  5 基于OpenGL的纹理映射
  
  尽管纹理映射是一个较复杂的过程,但是大都具备以下几个基本步骤:(1)纹理定义;(2)控制滤波;(3)启用纹理映射;(4)给出纹理坐标和几何坐标以绘制场景。
  5.1 定义纹理
  正如大多数图像那样,纹理通常被认为是二维的。但是,纹理也可以是一维的或者是三维的。描述纹理的数据,每个纹理单元可以包括1、2、3或4个元素,用来表示从用一个常数,到用(R,G,B,A)四元组所能表示的任何事物。OpenGL定义二维纹理的函数是glTexImage2D(),其函数原型为:
  voidglTexImage2D(Glenumtarget,Glintcomponents,GLsizeiwidth,GLsizeiheight,GLintborder,GLenuformat,GLenumtype,constGLvoid*pixels);
  5.2 纹理模式
  OpenGL对于不同的渲染类型定义三种纹理模式:(1)GL-MODULATE,默认模式,在绘制到帧缓存区之前,纹理图像与帧缓存区复合。调整当前亮度和元素信息,使之适应纹理图像;(2)GL-DECAL,纹理图像直接绘制到帧缓存区;(3)GL-BLEND,在绘制到帧缓存区之前,纹理图像与一种常量颜色GL-TEXTURE-ENV-MODE混色。
  使用glTexEnv()函数设置纹理模式的举例:
  glTexEnvi(GL-TEXTURE-ENV,GL-TEXTURE-ENV-MODE,GL-DECAL);
  5.3 纹理过滤
  OpenGL提供两种纹理控制方式:放大滤波和缩小滤波。
  例如:
  glTexParameeteri(GL-TEXTURE-2D,
  GLTEXTURE-MAG-FILTER,GL-NEAR-EST)
  glTexParameeteri(GL-TEXTURE-2D,
  GLTEXTURE-MIN-FILTER,GL-NEAR-EST)
  5.4 纹理坐标
  纹理坐标可以包含1、2、3或4个坐标值的,通常用s、t、r和q来表示。OpenGL用函数glTexCoord()定义纹理坐标。纹理坐标,纹理矩形大小以及被贴物体的表面形状将直接影响纹理贴图的效果。
  5.4.1 重复和定位纹理
  纹理坐标位于0.0和1.0之间,当坐标值不在这一范围内时,它们或者被夹紧(wrap=GL-CLAMP,默认),或者重复(wrap=GL-REPEAT)。GL-CLAMP:纹理坐标到了图像边界时,会在边界处停止。GL-REPEAT:纹理坐标进行重复,绕转到图像的另一边。
  用glTexParameterf()函数重复和定位纹理,例如在s和t方向上重复纹理:
  glTexParameterf(GL-TEXTURE-2D,GLTEXTURE-WRAP-S,GL-REPEAT);
  glTexParameterf(GL-TEXTURE-2D,GLTEXTURE-WRAP-T,GL-REPEAT);
  5.4.2 自动生成纹理坐标
  使用纹理映射构造模型的轮廓图,或者模拟光亮物体表面反射周围场景中的景物效果时,使用glTexGen()函數自动生成纹理坐标。
  Void glTexGen{ifd} {v}(GLenumcoord,GLenumpname,TYPEparam);
  函数说明:该函数自动生成某一方向上的纹理坐标。
  Coord:必须是GL-S、GL-T、GL-R和GL-Q,分别生成s、t、r和q纹理坐标。
  (1)创建轮廓图
  pname为GL-TEXTURE-GEN-MODE,param为GL-OBJECT-LINEAR时,生成函数对物体顶点坐标(x0,y0,z0,w0)进行线性组合。
  生成的坐标=(p1x0,p2y0,p3z0,p4w0),p1、p2、p3和p4的值由glTexGen()函数的param参数给出,对p1、p2、p3和p4进行单位化,该函数给定了顶点到平面的距离。例如:若p1=p3=p4,p2=1,则函数给定的是顶点到平面y=0的距离。顶点到平面一面的距离为正,到平面另一面的距离为负,如果为零则顶点在平面上。
  一个纹理图像对于移动的物体一直保持不变时,应在物体坐标中指定参考平面,可以使用GL-OBJECT-LINEAR,在物体表面贴铺木纹;在移动的物体上生成动态的轮廓线,应在视点坐标GL-EYE-LINEAR中指定参考平面。
  (2)环境映射
  对于位于场景中表面光滑的物体,在真实世界中,它的表面应该反射出周围环境中的景物。这种效果可以运用OpenGL的环境映射来实现。
  例如:自动生成支持环境映射的纹理坐标
  glTexGeni(GL-S,GL-TEXTURE-GEN-MODE,GL-SPHERE-MAP);
  glTexGeni(GL-T,GL-TEXTURE-GEN-MODE,GL-SPHERE-MAP);
  glEnable(GL-TEXTURE-GEN-S);
  glEnable(GL-TEXTURE-GEN-T);
  GL-SPHERE-MAP常量为引用环境映射,创建适当的纹理坐标,并且在s和t方向上指定此常量。
  
  6 真实感图形的绘制
  
  在绘制三维场景时,应用OpenGL纹理映射技术绘制具有真实感场景图。其效果图如图3、图4所示。
  在图4中通过增加融合、反走样和雾化等一些特殊的显示效果,使生成的场景看起来更有真实感。
  
  7 结束语
  
  在VC++环境下,使用OpenGL的编程接口,在场景中采用光照、纹理映射等技术,能逼真地再现了三维场景中三维地形的真实感,取得了较好的渲染效果。
  参考文献:
  [1] Peachey D R. Modeling waves and surfaces[J]. Computer Graphics, 4,pp.65-74, 1986.
  [2] 徐迎庆, 等. 基于物理模型的流水及波浪模拟[J]. 计算机学报,1996,19[S]:153-163.
  [3] DavidFRogers(美),石教英, 等译. 计算机图形学的算法[M]. 机械工业出版社,2002.
  [4] Mason Woo, 等. OpenGL编程权威指南[M]. 中国电力出版社,2001.
  本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘要:MATLAB是当前流行应用软件和编程语言,它集数学计算、可视化和编程于一体,易学易用。本文介绍了MATLAB软件的主要特点,阐述了Mapping工具箱的主要内容以及其在数据处理及绘图中的应用。  关键词:MATLAB;mapping工具箱;可视化  中图分类号:TP319文献标识码:A文章编号:1009-3044(2007)03-10828-02    1 MATLAB简介    Matla
期刊
Windows XP防火墙是微软公司为加强安全性而在SP2中添加的一个实用功能,许多用户觉得该功能实在不够强大,属于那种“食之无味、弃之可惜”的“鸡肋”角色,于是干脆将其关闭。而改用其他的产品。其实,微软的产品应该说本身还是有一定的特色的,只要能设置好,运用得当,还是能满足一般要求的。    一、Winows XP防火墙启用与关闭    单击“开始”/“设置”/“控制面板”,在弹出的“控制面板”窗
期刊
摘要:介绍了纳西象形文在文化发展史上的重要地位及其现状。基于微软IME的基本工作原理和体系结构,阐述了纳西象形文拼音输入法的主要设计思路,并在Windows环境下采用VC++6.0实现了纳西象形文拼音输入法。  关键词:纳西象形文;IME;体系结构;拼音输入法  中图分类号:TP312  文献标识码:A  文章編号:1009-3044(2006)29-0130-01
期刊
摘要:从移动存储的角度,结合企业环境阐述如何判断Windows操作系統使用移动存储设备的痕迹问题,及有效屏蔽通用串行接口的方法。用图文的方式,论述了痕迹判断的可行性和屏蔽方法的有效性。  关键词:移动存储;通用串行总线;基本输入/输出系统;注册表  中图分类号:TP393  文献标识码:A  文章编号:1009-3044(2006)29-0131-01
期刊
摘要:本文设计了一套经济实用的数字家庭监控系统。该系统以装有嵌入式Linux的ARM为开发平台,以廉价的USB摄像头为图像采集设备。一旦获得图像,就可以通过GPRS发送,然后在监控中心复原图像,以实现远程的安全监控。整个系统开发成本低,运行可靠,使用方便。  关键词:嵌入式Linux;GPRS;USB  中图分类号:TP338文献标识码:B文章编号:1009-3044(2007)03-10819-
期刊
摘要:数据库开发中存在着重局部,轻全局,重应用性轻系统性的问题,旨在从理论和实践的视角探讨PB学习和开发中的几个核心问题: 三个关联,数据库的经典操作,实际开发中文件操作问题的解决等。  关键词:数据窗口;事务对象;API  中图分类号:TP301 文献标识码:B 文章编号:1009-3044(2007)03-10850-02    1 引言    PB 是一个跨平台的高效的数据库开发工具,它最初
期刊
摘要:本文通过将人工智能技术应用于CAI,探讨CAI系统的智能化的構建的两个模型:智能CAI教学系统ICAI和超文本智能计算机辅助教学HICAI。  关键词:人工智能;智能CAI教学系统;超文本智能计算机辅助教学HICAI;知识库;超文本   中图分类号:TP391  文献标识码:B  文章编号:1009-3044(2006)29-0132-02
期刊
摘要:设计成熟的共享软件,一般都会向使用者提出注册的要求,用以保证软件开发者的版权和利益,本文用Delphi程序设计语言,为读者展示如何使用ini文件和注册表文件,设计软件注册程序。  关键词:Delphi;注册;类;注册表  中图分类号:TP311.52  文獻标识码:B  文章编号:1009-3044(2006)29-0140-02
期刊
摘要:TSP问题(旅行商问题)是组合优化问题中最经典的NP问题之一,蚁群算法是基于群體的一种仿生算法,为求解复杂的组合优化问题提供了一种新思路,本文讨论了如何用基本的蚁群算法来求解TSP问题。  关键词:蚁群算法;TSP问题  中图分类号:TP311  文献标识码:A  文章编号:1009-3044(2006)29-0096-01
期刊
摘要:基于XML的中间件技术与知识集成相结合,设计了一个基于XML的知识集成中间件系统结构,并详细讨论了系统主要功能模塊的实现方法。  关键词:知识集成;中间件系统;XML  中图分类号:TP311  文献标识码:A  文章编号:1009-3044(2006)29-0137-03
期刊