吳發輝 張玲 余文森
關鍵詞: 紋理映射技術; 計算機圖形學; 兩步紋理映射; 環境紋理映射; 樣條曲線; 參數曲面
中圖分類號: 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]。針對上述問題,本文研究了適用于不規則多邊形以及參數曲面的二維紋理映射算法。
紋理映射問題的實質是物體表面的參數化問題。在已知物體表面參數信息的基礎上,可以將空間中紋理圖像直接映射到物體表面。常見的紋理映射算法包括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算法對圖像進行綜合處理,從而達到令人滿意的效果。
紋理映射技術主要是針對由多邊形組成的不規則物體的表面紋理映射處理技術,一般包括兩步紋理映射技術、環境紋理映射技術[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.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為利用以上函數得到的曲面紋理映射。
本文通過研究紋理映射技術的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.