基于图形学算法的纹理映射技术的研究与实现

2018-12-14 09:05吴发辉张玲余文森
现代电子技术 2018年24期
关键词:计算机图形学

吴发辉 张玲 余文森

关键词: 纹理映射技术; 计算机图形学; 两步纹理映射; 环境纹理映射; 样条曲线; 参数曲面

中图分类号: TN911.73?34; TP393                 文献标识码: A                 文章编号: 1004?373X(2018)24?0071?04

Research and implementation of texture mapping technology based on graphics algorithm

WU Fahui, ZHANG Ling, YU Wensen

(Wuyi University, Wuyishan 354300, China)

Abstract: It is difficult for the current texture mapping technology to give the general expression due to the changeable geometrical shapes of the object, resulting in application limitations of the texture mapping technology. Therefore, the Catmull algorithm and Blinn algorithm applicable for irregular polygon and parametric curved surface texture mapping are studied. The two?step texture mapping technology and environmental texture mapping technology are adopted to realize plane and parametric curved surface texture mapping by using the spline curve mode in OpenGL. The results show that the research content in this paper has great significance for promotion and application of the texture mapping technology.

Keywords: texture mapping technology; computer graphics; two?step texture mapping; environmental texture mapping; spline curve; parametric curved surface

一直以来纹理映射技术均是计算机图形学研究的热点,传统的纹理映射技术可以有效增加计算机图形的真实感[1?2]。同时随着近年来计算机图形技术的发展,纹理映射技术已经由传统的软件绘图领域发展到硬件图形领域。此外,该技术也被广泛应用到各种复杂物体的图形渲染当中[3]。由于物体表面多由不规则的多边形或曲面组成,难以建立统一的参数表达式,因此给纹理映射技术的实现带来了困难[4]。针对上述问题,本文研究了适用于不规则多边形以及参数曲面的二维纹理映射算法。

1  纹理映射的基本算法

纹理映射问题的实质是物体表面的参数化问题。在已知物体表面参数信息的基础上,可以将空间中纹理图像直接映射到物体表面。常见的纹理映射算法包括Catmull算法和Blinn算法[5?6]。

Catmull属于一种递归分割的方法用于显示参数曲面,即利用子曲面产生的像素按照双线差值的方法来计算该点的法线方向和光亮度。同时,Catmull算法在对曲面进行分割的同时也会对相应的纹理空间进行曲面分割[7]。按照同样的处理方法可以使得每个子曲面的像素和纹理空间中指定的区域相对应,从而得到平均纹理颜色。其的原理如图1所示。在实际处理过程中,一个像素包含多个子曲面的空间投影,如图2所示。假设像素e所对应的物体表面包含4个子曲面,定义光亮度[ri]为面S在其中的投影面积Se与S1+S2+S3+S4的比值,则纹理映射的光亮度为:

[Ie=i=14riIi]            (1)

通过对计算和像素e相关的每个子曲面对其光亮度的贡献值,得到纹理映射的最终亮度。

在使用Catmull方法进行纹理映射变换时,可以不用考虑纹理空间和物体之间的逆变换。但由于其算法本身的缺点,使得其在纹理空间的显示精度方面有一定的局限性。同时为了对子曲面的纹理映射空间进行像素转换的计算,Catmull方法会占用大量的存储空间,该缺点也限制了其发展。

而Blinn方法的提出则克服了上述缺点。其能够将像素表示的区域投影在景物表面上,然后利用映射到纹理空间的显示曲面得到与其对应的纹理属性。因此,在一般的纹理映射过程中,会根据实际使用的需求结合Catmull算法和Blinn算法对图像进行综合处理,从而达到令人满意的效果。

2  纹理映射技术

纹理映射技术主要是针对由多边形组成的不规则物体的表面纹理映射处理技术,一般包括两步纹理映射技术、环境纹理映射技术[8?9]。

2.1  两步纹理映射技术

两步纹理映射技术的核心是利用一个中间映射媒介,来完成表面纹理映射技术的处理工作。

首先,建立三維物体的表面中间映射媒介S:

[T(u,v)→T′(x′,y′,z′)]     (2)

然后,将中介物纹理映射到目标物体表面:

[T′(x′,y′,z′)→O(x,y,z)]    (3)

这样,纹理空间得到的物体映射便可由上述两个映射复合得到,如下:

[(u,v)→S(x′,y′,z′)→O(x,y,z)] (4)

式(3)~式(4)表明了“纹理空间→中介空间→景物空间”的映射关系。两步纹理映射的关键在于合适的中介表面的建立,及其到景物空间之间特定的映射关系。通常情况下,考虑常见的中介几何,例如平面、柱面、立方体以及球面等可以建立以下4种映射关系,如图3所示。

上述4种映射关系中,反射光线的映射最为广泛。此外,还可以根据不同的排列组合构成16种映射关系,如表1所示。在实际应用过程中,考虑到真实的物理环境以及其他条件的限制,两步纹理映射技术可以构成9种有效组合。

2.2  环境纹理映射技术

环境纹理映射技术可以更好地模拟光线跟踪效果,是两步纹理映射技术的一种延伸和发展[10]。环境纹理映射技术的核心思想是通过一个包围物体的映射“环境”,将物体表面纹理映射在其内表面。这里的环境是指一个可以将物体完全包围的映射曲面,例如球面或者立方体面。图4为球面环境纹理映射技术示意图。

从视点出发,任取物体表面的一点P,光线V经过该点反射得到反射光线Vr。放射光线与中介面的交点E(u,v),即为映射点,则有:

[u=121+1πarctanVryVrx]    (5)

[v=12(Vrz+1)]          (6)

[Vr=(Vrx,Vry,Vrz)]        (7)

根据上述关系,从而得到纹理映射信息。环境纹理映射技术是两步纹理映射技术的发展,能够充分利用入射光线信息以及景物空间反射信息,从而提高了纹理映射技术的准确度和真实感。

3  表面纹理映射的实现

3.1  平面纹理映射的实现

OpenGL是一个开放的三维图形软件包,对图形数据具有高效的处理能力。因此,本文利用OpenGL对纹理映射技术进行研究。OpenGL在实现纹理映射技术过程中的基本步骤主要包括纹理定义、纹理控制、映射方式的确定和纹理坐标的确定。在OpenGL中,利用void glTexImage2D定义一个基本的二维函数,函数信息主要包括GLenum target,Glint level,Glint components,GLsize width,GL height等。其中,对于一个二维纹理映射而言,参数GLenum target是一个常数。

纹理控制单位是通过函数void glTexParameter{if}[v](GLenum target,GLenum pname, TYPE param)来实现的。其中:target表明函数的种类;pname指出纹理映射的方法;同时,纹理映射参数由param来确定。

映射方式通过调用函数glTexEnv()来实现,在OpenGL中提供了三种函数:GL_DECAL,GL_MODULATE和GL_BLEND,分别用于实现纹理RGB颜色。

纹理的坐标通过glTexGoord()来确定。一般情况下,程序中直接采用.bmp文件进行贴图。若使用坐标现实确定,则使平面坐标和二维纹理映射(s,t)相对应即可;若使用自动生成坐标方式,则需要使用纹理生成函数GL_ONJECT_LINEAR来完成相应的功能。图5为利用glTexGoord()函数完成的平面纹理映射贴图。

3.2  参数曲面纹理映射的实现

在计算机中,大量的曲线和曲面均通过样条曲线的形式存在。其中,B样条曲线是目前CAD设计中使用最为广泛的一种样条曲线。已知控制点为[Pi],则B样条曲线的表达式为:

[C(u)=i=0nPiBi,k(u)]       (8)

式中,[Bi,k(u)]为基函数,定义如下:

[Bi,0(u)=1,     ti≤u≤ti+10,     其他]       (9)

[Bi,k(u)=u-tiBi,k-1(u)ti+k-ti+(ti+k+1-u)Bi+1,k-1(u)ti+k+1-ti+1] (10)

式中,[[t1,t2,…,tn+k+1]]为样条曲线的节点矢量矩阵。

<E:\现代电子技术201824\Image\89t5.tif>

图5  平面纹理映射贴图

Fig. 5  Plane texture mapping

三维设计中通常包括NURBS样条曲线,定义为:

[P(u)=i=0nBi,k(u)WiVii=0nBi,k(u)Wk]      (11)

式中:V为控制点;W为权重因子;B为NURBS样条曲线的基函数,定义如下:

[Bi,0(u)=1,     ti≤u≤ti+10,     其他]      (12)

[Bi,k(u)=u-tiBi,k-1(u)ti+k-ti+(ti+k+1-u)Bi+1,k-1(u)ti+k+1-ti+1                     tk-1≤u≤tn+1,k>0]  (13)

式中,[u=[u0,u1,…,um]]为节点矢量,节点数为m+1,控制点数为n+1,节点数量和控制点数量之间满足:

[m=n+1]           (14)

由二维平面推广到三维曲面可得,NURBS曲面的定义如下:

[P(u)=i=0nj=0mBi,k(u)B(v)Wi,jVi,ji=0nj=0mBi,k(u)B(v)Wi,j] (15)

式中,[Bi,k(u)]和[B(v)]分别为沿[u]方向与v方向的B样条函数曲线。

OpenGL在绘制样条曲线的过程中,使用n+1阶Bezier多项式对其进行计算:

[Bni(u)=niu′(1-u)n-i, i=0,1,2,…,n] (16)

定义C([u])为样条曲线的求值器,且[u]的取值范围为0~1,则表达式为:

[C(u)=i=0nBni(u)Pi]       (17)

求值器的值为:

[Cu-u1u2-u1]         (18)

对于二维曲面,求值器的表达式为:

[S(u,v)=i=0nj=0mBni(u)Bmj(v)Pij]    (19)

式中,Pij由[m×n]个控制点控制。

在OpenGL实现中,利用函数glEvalCoord2{fd}(u,v)定义曲面上的一个顶点左边。同时,参数[u]和v分别为一个已知值。同时,利用glMapGrid2(·)函数可以定义一个二维网络;然后可利用函数glEvalMesh(·)得到二维网格映射求值器。图6为利用以上函数得到的曲面纹理映射。

4  结  语

本文通过研究纹理映射技术的Catmull算法和Blinn算法,在此基础上提出可以实现平面纹理映射的两步纹理映射技术,以及用于实现曲面纹理映射的环境纹理映射技术。利用OpenGL建立参数曲面模型,对参数曲面模型纹理映射技术进行验证。结果表明,本文研究内容对于纹理映射技术的应用与推广具有重要意义。

参考文献

[1] 邵绪强,聂霄,王保义.GPU并行计算加速的实时可视外壳三维重建及其虚实交互[J].计算机辅助设计与图形学学报,2017,29(1):52?61.

SHAO Xuqiang, NIE Xiao, WANG Baoyi. GPU?based real?time 3D visual hull reconstruction and virtual?reality interaction [J]. Journal of computer?aided design & computer graphics, 2017, 29(1): 52?61.

[2] 樊养余,王军敏,余建明.高效的光照、旋转、尺度不变纹理分类算法[J].计算机辅助设计与图形学学报,2017,29(11):1989?1996.

FAN Yangyu, WANG Junmin, YU Jianming. An Efficient texture classification algorithm with illumination, rotation and scale invariance [J]. Journal of computer?aided design & computer graphics, 2017, 29(11): 1989?1996.

[3] SHI K L,YONG J H, SUN J G, et al. Gn blending multiple surfaces in polar coordinates [J]. Computer?aided design, 2010, 42(6): 479?494.

[4] YASUI Y, KANAI T. Surface quality assessment of subdivision surfaces on programmable graphics hardware [C]// Proceedings of Shape Modeling Applications. Genova: IEEE, 2004: 129?138.

[5] 鲁大营,朱登明,王兆其.基于纹理的多分辨率流场可视化算法[J].计算机研究与发展,2015,52(8):1910?1920.

LU Daying, ZHU Dengming, WANG Zhaoqi. Texture?based multi?resolution flow visualization [J]. Journal of computer research and development, 2015, 52(8): 1910?1920.

[6] 曾云,饶志恒.纹理映射技术中Mip?Map的研究[J].微计算机信息,2012,28(4):1?2.

ZENG Yun, RAO Zhiheng. Research on Mip?Map of texture mapping [J]. Microcomputer information, 2012, 28(4): 1?2.

[7] 江昊,何明一.基于特征约束点的纹理映射算法[J].计算机仿真,2009,26(1):237?239.

JIANG Hao, HE Mingyi. Texture mapping based on feature and constrained points [J]. Computer simulation, 2009, 26(1): 237?239.

[8] 申世恒,李柏岩,刘晓强,等.基于区域增长和三角分割的局部纹理映射算法[J].合肥工业大学学报(自然科学版),2012,35(2):176?179.

SHEN Shiheng, LI Baiyan, LIU Xiaoqiang, et al. An algorithm for regional texture mapping based on region growing and triangulation [J]. Journal of Hefei University of Technology (Natural science), 2012, 35(2): 176?179.

[9] 袁启明,施侃乐,雍俊海,等.曲面二阶几何连续性的混合曲率评价与可视化[J].计算机辅助设计与图形学学报,2011,23(11):1830?1837.

YUAN Qiming, SHI Kanle, YONG Junhai, et al. The mixed curvature and the G2 continuity visualization of surfaces [J]. Journal of computer?aided design & computer graphics, 2011, 23(11): 1830?1837.

[10] SHI K L, YONG J H, SUN J G, et al. Gn blending multiple surfaces in polar coordinates [J]. Computer?aided design, 2010, 42(6): 479?494.

猜你喜欢
计算机图形学
边标志算法中常见问题及解决方法
计算机图形学教学中的“差别”培养
计算机图形学与图形图像处理技术
用面向科学思维的教学方法改进计算机图形学课程教学
三维投影变换的MATLAB实现
二维离散点集Delaunay三角网生长算法的改进
论数字媒体艺术教育中专业方向细分的必要性
基于计算思维的计算机图形学教学改革与实践
计算机图形学教学改革浅论
多边形裁剪算法实现与改进