一種基于二維和三維一體化矢量渲染引擎的裝置制造方法
【專利摘要】本發(fā)明公開了一種二維和三維一體化矢量渲染引擎的裝置,所述引擎提供繪制原語轉(zhuǎn)換功能,即將二維繪制原語轉(zhuǎn)換成三維繪制原語,二維繪制原語是功能的輸入,三維繪制原語是功能的輸出,所述引擎完成二維矢量數(shù)據(jù)和三維矢量數(shù)據(jù)的渲染,三維矢量數(shù)據(jù)直接調(diào)用三維矢量渲染引擎完成渲染,二維矢量數(shù)據(jù)將經(jīng)過一體化渲染引擎分線、面、圖片和文字不同類型處理形成三維繪制原語,然后由三維矢量渲染引擎完成最終渲染。
【專利說明】一種基于二維和三維一體化矢量渲染引擎的裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于對地觀測與導(dǎo)航【技術(shù)領(lǐng)域】,更具體是涉及計(jì)算機(jī)上二、三維空間矢量數(shù)據(jù)可視化過程中的渲染裝置,可用于地理信息系統(tǒng)與服務(wù)的應(yīng)用開發(fā)。
【背景技術(shù)】
[0002]二、三維矢量渲染是計(jì)算機(jī)圖形技術(shù)應(yīng)用的一個(gè)重要方面。矢量渲染引擎是指將矢量數(shù)據(jù)以渲染原語渲染到位圖或者顯示設(shè)備上。二維矢量渲染引擎通過定義線寬、線型、顏色、填充類型等渲染原語來達(dá)到多樣化渲染二維矢量數(shù)據(jù)的目的。三維矢量渲染引擎通過定義三角形、頂點(diǎn)索引、顏色、紋理坐標(biāo)等渲染原語來達(dá)到多樣化渲染三維矢量數(shù)據(jù)的目的。
[0003]二維矢量渲染引擎,如⑶I,⑶I+,Agg, Skia, Cario等一般是基于CPU直接實(shí)現(xiàn)的,它們具備以二維渲染原語渲染矢量數(shù)據(jù)的能力。但受限于CPU整數(shù)運(yùn)算器,基于CPU運(yùn)算的二維矢量渲染引擎的圖形渲染性能不如基于GPU的三維矢量渲染引擎。三維矢量渲染引擎,如OpenGL,Direct3D,OpenGL ES,WebGL等都是基于GPU硬件實(shí)現(xiàn)的,它們具有非常高的渲染性能,更好的渲染效果,也更加節(jié)能。雖然各種三維引擎都是以三維矢量渲染原語為基礎(chǔ),但是不同的三維渲染引擎在調(diào)用接口上比較迥異。為了提高二維矢量渲染的性能,一些二維矢量渲染引擎也具備使用GPU硬件加速的能力,實(shí)際上是將三維矢量渲染引擎內(nèi)置于二維矢量渲染引擎的內(nèi)部,二維矢量渲染引擎將二維渲染原語轉(zhuǎn)換成三維渲染原語并直接調(diào)用三維渲染引擎渲染出結(jié)果,如Skia,Cario等二維矢量渲染引擎就具備這樣的硬件加速能力。
[0004]在地理信息系統(tǒng)領(lǐng)域,一些三維場景應(yīng)用中需要在某個(gè)平面上渲染出二維圖形,也就是需要同時(shí)使用到三維和二維矢量渲染引擎的能力。然而,計(jì)算機(jī)二維、三維矢量渲染引擎在引擎的輸入數(shù)據(jù)類型、渲染原語定義上存在區(qū)別,導(dǎo)致二維、三維一體化矢量渲染難以達(dá)到理想的效果,比較突出的問題有:
[0005]I)目前常用的二維矢量渲染引擎和一些操作系統(tǒng)平臺(tái)或者硬件平臺(tái)耦合比較緊密,這導(dǎo)致使用二維矢量渲染引擎的圖形軟件在不同平臺(tái)上移植的時(shí)候需要更高的成本。
[0006]2)在同一圖形軟件中,如果同時(shí)使用基于GPU硬件加速的二維矢量渲染引擎渲染二維場景,使用三維矢量渲染引擎渲染三維場景時(shí)可能會(huì)導(dǎo)致不同或者多個(gè)三維矢量渲染引擎因使用GPU硬件出現(xiàn)沖突。
[0007]3)通常情況下,將二維矢量數(shù)據(jù)渲染到三維場景中都是先渲染二維矢量數(shù)據(jù)為位圖,然后轉(zhuǎn)換成紋理并渲染到三維場景中,其性能較低并且降低了矢量數(shù)據(jù)最終顯示的效果O
[0008]為此,針對上述技術(shù)問題,本發(fā)明提供一種二、三維一體化矢量渲染引擎的裝置,所述引擎提供繪制原語轉(zhuǎn)換功能,即將二維繪制原語轉(zhuǎn)換成三維繪制原語,二維繪制原語是功能的輸入,三維繪制原語是功能的輸出。三維矢量數(shù)據(jù)直接調(diào)用三維矢量渲染引擎完成渲染,二維矢量數(shù)據(jù)將經(jīng)過一體化渲染引擎分線、面、圖片和文字不同類型處理形成三維繪制原語,然后由三維矢量渲染引擎完成最終渲染,中間并不生成位圖,從而達(dá)到二、三維一體化快速顯示的目的。
【發(fā)明內(nèi)容】
[0009]針對現(xiàn)有技術(shù)中的不足,本發(fā)明實(shí)現(xiàn)了一種二維和三維一體化矢量渲染引擎的裝置和方法,提供繪制原語轉(zhuǎn)換功能,即將二維繪制原語轉(zhuǎn)換成三維繪制原語,二維繪制原語是功能的輸入,三維繪制原語是功能的輸出,如圖1所示,所述引擎完成二維矢量數(shù)據(jù)和三維矢量數(shù)據(jù)的渲染,三維矢量數(shù)據(jù)直接調(diào)用三維矢量渲染引擎完成渲染,二維矢量數(shù)據(jù)將經(jīng)過一體化渲染引擎分線、面、圖片和文字不同類型處理形成三維繪制原語,然后由三維矢量渲染引擎完成最終渲染,如圖2所示。
[0010]線渲染通過定義顏色、線寬、線型語義來渲染折線、曲線矢量數(shù)據(jù)。線繪制原語轉(zhuǎn)換根據(jù)顏色、線寬、線型轉(zhuǎn)換為三維繪制原語,一個(gè)帶顏色值的頂點(diǎn)數(shù)組和一個(gè)索引數(shù)組就是線繪制原語到三維繪制原語轉(zhuǎn)換的結(jié)果,線原語轉(zhuǎn)換過程需要根據(jù)線的類型轉(zhuǎn)換線的端頭為平頭或者圓頭,如果是圓頭則需要插入多個(gè)頂點(diǎn)形成三角形扇形模擬端頭的圓弧,相應(yīng)的頂點(diǎn)和索引應(yīng)加入頂點(diǎn)和索引數(shù)組形成更為復(fù)雜的三維渲染原語;對于多段折線也需要在線段間銜接處生成圓弧銜接的扇形,平角銜接類型的線型需要考慮線段夾角為銳角時(shí)會(huì)計(jì)算出的尖頭。
[0011]面填充渲染通過定義填充類型、填充顏色語義來渲染面矢量數(shù)據(jù)。面渲染原語轉(zhuǎn)換主要使用三角剖分算法實(shí)現(xiàn),以面的輪廓線為基礎(chǔ)將面剖分成若干鑲嵌的三角形,所有這些鑲嵌的三角形最終覆蓋面的范圍。面渲染原語轉(zhuǎn)換輸出的結(jié)果和線渲染原語轉(zhuǎn)換的結(jié)果類似,也是一個(gè)帶顏色值的頂點(diǎn)數(shù)組和一個(gè)索引數(shù)組。面顏色填充包括是純色填充和漸變色填充,純色填充時(shí)輸出的三維渲染原語中頂點(diǎn)顏色值為相同的顏色值,漸變色填充時(shí),在三角形剖分過程中添加若干以填充中心為圓心圓的輔助線,剖分出更為復(fù)雜的鑲嵌三角形,并根據(jù)三角形頂點(diǎn)距離漸變色填充中心點(diǎn)的距離來計(jì)算剖分出來的三角形頂點(diǎn)的顏色值。基于路徑的漸變色填充采用圓心漸變填充類似的方式,在剖分過程中添加若干的輔助線來加密剖分的三角形,根據(jù)到路徑起點(diǎn)的距離計(jì)算剖分出來的三角形頂點(diǎn)顏色值。
[0012]位圖渲染原語的轉(zhuǎn)換主要是換算出位圖顯示的矩形范圍、以及該范圍對應(yīng)于位圖上的紋理坐標(biāo)。
[0013]字體渲染原語轉(zhuǎn)換方法和面渲染原語轉(zhuǎn)換相似,對于字體渲染過程來說,使用者輸入的數(shù)據(jù)不是面范圍,而是字體、顏色、字體大小、文字,排版布局信息,渲染引擎根據(jù)字體和字體大小從字體庫中獲取字體渲染的輪廓,通過面三角剖分算法形成字體渲染的三維渲染原語。
[0014]一體化矢量渲染引擎具備二維矢量渲染引擎的核心能力,和具體操作系統(tǒng)平臺(tái)或者硬件平臺(tái)沒有明確的依賴關(guān)系,使用一體化渲染引擎的圖形軟件可以快速到移植到不同平臺(tái),并能夠保持不同平臺(tái)上渲染效果一致,解決了常用二維矢量渲染引擎和平臺(tái)過于緊耦的問題。
[0015]一體化渲染引擎不嚴(yán)格依賴特定的三維矢量渲染引擎來做最終的渲染,用戶可以在圖形軟件中根據(jù)開發(fā)的需要選擇使用不同的三維矢量渲染引擎來做最終的渲染,圖形軟件中同時(shí)基于硬件加速渲染二維、三維圖形時(shí)不會(huì)出現(xiàn)硬件爭搶的情況,解決了不同三維引擎爭搶GPU硬件或者創(chuàng)建多個(gè)硬件引擎帶來更多的開銷的問題。
[0016]一體化渲染引擎直接將二維矢量數(shù)據(jù)渲染到三維場景中的某個(gè)平面上,并不采用紋理貼圖的方式,先繪制數(shù)據(jù)到位圖,再將位圖轉(zhuǎn)換成紋理后貼圖,過程簡單且不會(huì)造成失真,提高二維矢量渲染的速度,也可以提升渲染的效果。
[0017]一種二、三維一體化矢量渲染引擎的原理如下:
[0018]I)雖然二維、三維矢量渲染引擎在引擎的輸入數(shù)據(jù)類型、渲染原語定義上存在區(qū)另O,但最終輸出都可以保持一致,即以柵格(像素)的形式渲染到位圖或者顯示設(shè)備上。三維矢量渲染引擎在理論上比二維矢量渲染引擎多一個(gè)維度,二維矢量渲染引擎的功能只是三維矢量渲染引擎在一個(gè)平面上的功能。也就是說,三維矢量渲染引擎理論上可以兼容二維矢量渲染引擎的功能。
[0019]2)針對常用二維矢量渲染引擎在不同平臺(tái)上移植難度較大的缺點(diǎn),本發(fā)明提供的二、三維一體化矢量渲染引擎與方法可以減少使用該引擎的圖形軟件在不同平臺(tái)上移植的成本,并能夠保持不同平臺(tái)上渲染效果一致。
[0020]二維矢量渲染用途廣泛,但基于CPU計(jì)算的渲染速度逐漸不能滿足圖形軟件開發(fā)需要?;贕PU硬件加速的二維矢量渲染引擎具有很廣的使用前途,但是,現(xiàn)有基于GPU硬件加速的二維矢量渲染引擎都是將三維矢量渲染引擎以緊耦合的方式置于二維矢量渲染引擎內(nèi)部。例如,Skia和Cario渲染引擎都緊耦了 OpenGL三維渲染引擎,Direct2D緊耦了 Direct3D,這種緊耦合方式在一定程度上簡化了硬件加速帶來的開發(fā)復(fù)雜性,但是讓使用這些引擎的圖形軟件在跨越多個(gè)平臺(tái)開發(fā)的時(shí)候存在更多的工作,并且不同二維繪制引擎對于二維渲染原語的不同解釋也造成圖形軟件表現(xiàn)效果不一致。
[0021]本發(fā)明提供的二、三維一體化矢量渲染引擎將二維繪制原語作為輸入,將通用的三維繪制原語作為輸出。雖然在不同平臺(tái)上具有不同的三維矢量渲染引擎,但是,各種三維矢量渲染引擎的繪制原語則基本一致。因此,該引擎使用者只需要較少甚至無需改動(dòng)即可將輸出的三維渲染原語用于不同平臺(tái)上的三維渲染引擎,而且,該引擎如果移植到不同的平臺(tái)上也可以保持一致的渲染效果。
[0022]3)在同一款圖形軟件中,如果存在使用三維渲染引擎,也使用帶硬件加速能力的二維渲染引擎,把二維圖形渲染作為三維場景的局部平面顯示,則會(huì)導(dǎo)致三維引擎爭搶GPU硬件或者創(chuàng)建多個(gè)硬件引擎帶來更多的開銷的問題。本發(fā)明提供的二、三維一體化矢量渲染引擎可以讓圖形軟件中同時(shí)基于硬件加速渲染二維、三維圖形時(shí)不會(huì)存在硬件爭搶的情況。
[0023]基于硬件加速的二維矢量渲染引擎通常將某三維渲染引擎封裝于內(nèi)部來達(dá)到硬件加速的目的。基于硬件加速的二維矢量渲染引擎內(nèi)部封裝的三維渲染引擎上下文句柄可能無法訪問或者難以訪問到,如果圖形軟件同時(shí)也要渲染三維場景,則三維場景的渲染引擎和二維渲染引擎中的三維引擎很難共享引擎。例如,使用Direct2D渲染二維圖形,使用DirectX渲染三維場景,這種情況下,圖形軟件中實(shí)際使用了多個(gè)三維引擎實(shí)例,對圖形軟件的運(yùn)行帶來額外的開銷。
[0024]如果二維圖形使用基于OpenGL加速的二維矢量渲染引擎,同時(shí)使用OpenGL渲染三維場景,這種情況下可以容易地共享三維渲染引擎的實(shí)例。但是,如果圖形軟件將兩種引擎分別用于不同的應(yīng)用,則會(huì)造成兩種應(yīng)用同時(shí)使用OpenGL時(shí)的渲染錯(cuò)亂,因?yàn)镺penGL弓丨擎的特點(diǎn)是同一時(shí)刻只能存在一個(gè)實(shí)例進(jìn)行渲染,這將導(dǎo)致在渲染前需要切換到正確的引擎實(shí)例。上述基于硬件加速的二維矢量渲染引擎不容易訪問內(nèi)部三維引擎的實(shí)例的問題造成了切換引擎實(shí)例時(shí)難于把握最佳的時(shí)機(jī)。
[0025]本發(fā)明提供的二、三維一體化矢量渲染引擎并不是直接將三維渲染引擎通過緊耦合的方式置于引擎內(nèi)部,因此,該引擎用戶可以自由選擇使用不同的三維渲染引擎執(zhí)行渲染,也更容易決定三維場景和二維渲染是否使用同一個(gè)三維渲染引擎實(shí)例。
[0026]4)三維場景中渲染二維矢量通常采用紋理貼圖的方式,繪制數(shù)據(jù)到位圖,再將位圖轉(zhuǎn)換成紋理后貼圖,這種方法造成整個(gè)過程效率低下,同時(shí)紋理貼圖也會(huì)造成矢量數(shù)據(jù)顯示出來后失真。本發(fā)明提供的二、三維一體化矢量渲染引擎直接以矢量的形式在三維場景中繪制二維矢量數(shù)據(jù),過程簡單且不會(huì)造成失真。
[0027]在三維場景的某個(gè)平面中需要渲染二維矢量圖形時(shí),通常是通過二維矢量渲染引擎將矢量數(shù)據(jù)渲染到位圖中,然后通過紋理貼圖的三維繪制原語將二維矢量位圖貼到三維場景中。這種做法存在多個(gè)較慢的步驟,這對于性能要求較高的應(yīng)用,存在比較明顯的延遲,從而造成了不佳的用戶體驗(yàn)。另外,對于紋理渲染出來的平面傾斜,會(huì)造成已經(jīng)柵格化的矢量位圖以拉伸或者收縮的方式顯示,從而導(dǎo)致出現(xiàn)馬賽克現(xiàn)象。
[0028]本發(fā)明提供的二、三維一體化矢量渲染引擎可以將二維渲染原語轉(zhuǎn)換成三維渲染原語,當(dāng)用戶需要將輸出結(jié)果用于三維引擎渲染時(shí),可以直接將數(shù)據(jù)渲染到三維場景的某個(gè)平面中,此方式可以直接提高將二維數(shù)據(jù)渲染到三維場景中的性能,也不會(huì)造成馬賽克現(xiàn)象。
[0029]有益效果
[0030]1、本發(fā)明在二維渲染方面不依賴某個(gè)特定的三維矢量渲染引擎,使得本引擎相對更加輕量,在不同平臺(tái)間移植成本更低,可以更加靈活使用。
[0031]2、本發(fā)明不是緊密耦合某個(gè)特定的三維渲染引擎,使得圖形軟件中進(jìn)行二、三維一體化渲染時(shí)可以共用同一個(gè)三維渲染引擎的實(shí)例。二、三維一體化渲染時(shí)二維數(shù)據(jù)渲染的流程更短,因此可以獲得很好的渲染性能和效果。
【專利附圖】
【附圖說明】
[0032]圖1是本發(fā)明二維和三維一體化矢量渲染引擎原理示意圖;
[0033]圖2是本發(fā)明二維繪制原語到三維繪制原語的轉(zhuǎn)換示意圖;
[0034]圖3是線繪制原語轉(zhuǎn)換示意圖;
[0035]圖4是線原語轉(zhuǎn)換過程中的圓頭處理;
[0036]圖5是多段折線原語轉(zhuǎn)換過程中的尖頭處理;
[0037]圖6是虛線原語轉(zhuǎn)換處理;
[0038]圖7是面渲染原語轉(zhuǎn)換示意圖;
[0039]圖8是面漸變色填充時(shí)渲染原語轉(zhuǎn)換示意圖;
[0040]圖9是基于路徑的面漸變色填充時(shí)渲染原語轉(zhuǎn)換示意圖。
[0041]圖10是位圖渲染原語轉(zhuǎn)換示意圖;
[0042]圖11是字體渲染原語轉(zhuǎn)換示意圖。【具體實(shí)施方式】
[0043]二維和三維一體化矢量渲染引擎的跨平臺(tái)實(shí)現(xiàn)
[0044]—體化矢量渲染引擎提供轉(zhuǎn)換二維繪制原語為三維繪制原語的功能,并且具備跨平臺(tái)應(yīng)用的能力,在不同的操作系統(tǒng)平臺(tái)或者硬件平臺(tái)使用不同的編程語言來實(shí)現(xiàn)。
[0045]對于PC平臺(tái)和嵌入式設(shè)備,米用C、C++編程語目實(shí)現(xiàn)。對于iOS設(shè)備,適合用object-c語言實(shí)現(xiàn)。對于Android設(shè)備或者Web Service服務(wù)應(yīng)用,適合用C、C++實(shí)現(xiàn)封裝JNI調(diào)用或者直接使用Java語言實(shí)現(xiàn)。對于Web瀏覽器上應(yīng)用,適合用JavaScript語言實(shí)現(xiàn),但限于JavaScript語言能力,在瀏覽器應(yīng)用中可以只實(shí)現(xiàn)本渲染引擎的局部或者實(shí)現(xiàn)簡化版本。
[0046]二維繪制原語到三維繪制原語的轉(zhuǎn)換
[0047]一體化矢量渲染引擎具有二維繪制原語到三維繪制原語的轉(zhuǎn)換功能,如圖1所示。該渲染引擎在不同的操作系統(tǒng)平臺(tái)或者硬件平臺(tái)上運(yùn)行的時(shí)候需要和該平臺(tái)上使用的某種三維矢量渲染引擎配合形成一個(gè)完整的可用于獨(dú)立二維渲染或者二、三維一體化渲染的矢量渲染引擎。
[0048]二維繪制原語轉(zhuǎn)換成三維繪制原語時(shí),二維繪制原語是功能的輸入,三維繪制原語是功能的輸出,其中,二維渲染原語可以分為四種類型:
[0049](I)線渲染,通過定義顏色、線寬、線型等語義來渲染折線、曲線矢量數(shù)據(jù)。
[0050](2)面填充渲染,通過定義填充類型、填充顏色等語義來渲染面矢量數(shù)據(jù)。
[0051](3)位圖渲染,將位圖數(shù)據(jù)渲染到特定范圍內(nèi)。
[0052](4)字體渲染,將文字以特定的字體、大小渲染出來。
[0053]二維繪制原語到三維繪制原語的轉(zhuǎn)換示意圖如圖2所示。本引擎可完成二維矢量數(shù)據(jù)和三維矢量數(shù)據(jù)的渲染,三維矢量數(shù)據(jù)無需處理直接調(diào)用三維矢量渲染引擎即可完成渲染,二維矢量數(shù)據(jù)將經(jīng)過本渲染引擎分線、面、圖片、文字四種類型處理形成三維繪制原語,然后由三維矢量渲染引擎完成最終渲染。
[0054]( I)線繪制原語轉(zhuǎn)換
[0055]根據(jù)顏色、線寬、線型轉(zhuǎn)換為三維繪制原語,如錯(cuò)誤!未找到引用源。所示。
[0056]簡單的具有線寬和顏色實(shí)線繪制原語轉(zhuǎn)換成三維繪制原語是(Pl?P4)四個(gè)點(diǎn)構(gòu)成的兩個(gè)三角形通過頂點(diǎn)數(shù)組[P1,P2,P3,P4],索引數(shù)組[0,1,2,0, 1,3]描述。如果考慮線的顏色則頂點(diǎn)數(shù)組數(shù)據(jù)中需要為每個(gè)頂點(diǎn)添加顏色值,即頂點(diǎn)數(shù)組為[(Pl,Color),(P2, Color), (P3, Color), (P4, Color)]。一個(gè)帶顏色值的頂點(diǎn)數(shù)組和一個(gè)索引數(shù)組就是線繪制原語到三維繪制原語轉(zhuǎn)換的結(jié)果。
[0057]線原語轉(zhuǎn)換過程需要根據(jù)線的類型轉(zhuǎn)換線的端頭為平頭或者圓頭,如錯(cuò)誤!未找到引用源。所示。如果是圓頭,則需要插入多個(gè)頂點(diǎn)形成三角形扇形模擬端頭的圓弧,相應(yīng)的頂點(diǎn)和索引應(yīng)加入頂點(diǎn)和索引數(shù)組形成更為復(fù)雜的三維渲染原語。
[0058]對于多段折線,需要在線段間銜接處考慮生成圓弧銜接的扇形,平角銜接類型的線型則需要考慮線段夾角為銳角時(shí)會(huì)計(jì)算出的尖頭,如錯(cuò)誤!未找到引用源。所示,在轉(zhuǎn)換過程中,應(yīng)該避免這樣的尖頭導(dǎo)致出現(xiàn)不合理的顯示效果。
[0059]對于虛線而言,每個(gè)實(shí)部都采用實(shí)線的方式轉(zhuǎn)換為三維渲染原語,如圖6所示。
[0060](2)面渲染原語轉(zhuǎn)換[0061]主要使用三角剖分算法以面的輪廓線為基礎(chǔ)將面剖分成若干鑲嵌的三角形,所有這些鑲嵌的三角形最終覆蓋面的范圍。面渲染原語轉(zhuǎn)換輸出的結(jié)果和線渲染原語轉(zhuǎn)換的結(jié)果類似,也是一個(gè)帶顏色值的頂點(diǎn)數(shù)組和一個(gè)索引數(shù)組。
[0062]面三角剖分時(shí)應(yīng)考慮中間帶洞的面數(shù)據(jù),如圖7所示,應(yīng)該避免剖分中間的洞,最終形成鑲嵌三角形覆蓋類似圓環(huán)的范圍。
[0063]面渲染的目標(biāo)是為面中間填充相應(yīng)的顏色,面顏色的填充可以是純色填充,對于這樣的情況,最終輸出的三維渲染原語中頂點(diǎn)顏色值為相同的顏色值。
[0064]面顏色填充也可以是漸變色填充,漸變色填充具有多種方式如以中心向四邊漸變填充,如圖8所示,可以在做三角剖分算法時(shí)添加若干以填充中心為圓心圓的輔助線,最終可以剖分出更為復(fù)雜的鑲嵌三角形,剖分出來的三角形頂點(diǎn)的顏色值依賴于三角形頂點(diǎn)到漸變色填充中心點(diǎn)的距離來計(jì)算。
[0065]基于路徑的漸變色填充也可以采用圓心漸變填充類似的方式在剖分過程添加若干的輔助線來加密剖分的三角形密度,剖分出來的三角形頂點(diǎn)顏色值可以根據(jù)到路徑起點(diǎn)的距離進(jìn)行計(jì)算,如圖9所示。
[0066](3)位圖渲染原語轉(zhuǎn)換
[0067]主要能力是換算出位圖顯示的矩形范圍、以及范圍對應(yīng)于位圖上的紋理坐標(biāo)。
[0068]如圖10所示,期望繪制的位圖的全部范圍為[(0,0)?(1,1)],位圖中的期望繪制范圍為[U,V)?(ul,vl)],轉(zhuǎn)換成三維渲染原語是四個(gè)點(diǎn)組成的兩個(gè)三角形,四個(gè)點(diǎn)中的每個(gè)點(diǎn)都應(yīng)帶有紋理坐標(biāo)。位圖渲染轉(zhuǎn)換成的三維渲染原語頂點(diǎn)坐標(biāo)數(shù)組為[(Pl,(uI, v)), (P2, (u,V)),(P3, (u,vl)), (P4, (ul,vl))],索引數(shù)組為[O, 1,2,0, 1,3]。
[0069](4)字體渲染原語轉(zhuǎn)換
[0070]轉(zhuǎn)換方法和面渲染原語轉(zhuǎn)換比較類似。
[0071]對于字體渲染過程來說,使用者輸入的數(shù)據(jù)不是面范圍,而是字體、顏色、字體大小、文字,排版布局等信息,渲染引擎根據(jù)字體和字體大小從字體庫中獲取字體渲染的輪廓,通過面三角剖分算法形成自體渲染的三維渲染原語,如圖11所示。
[0072]三維渲染原語中坐標(biāo)值均為三維坐標(biāo)值,二維矢量數(shù)據(jù)沒有Z坐標(biāo),因此,二維渲染原語轉(zhuǎn)換成三維渲染原語之后,三維渲染原語中的Z坐標(biāo)均為O。如果使用本引擎在三維場景中渲染二維矢量數(shù)據(jù)則會(huì)讓矢量數(shù)據(jù)都渲染在XOY平面上。如果期望二維數(shù)據(jù)能夠渲染到三維場景中的其他平面中,則可以在調(diào)用三維渲染引擎之前設(shè)置三維渲染引擎的世界坐標(biāo)轉(zhuǎn)換矩陣,可以將數(shù)據(jù)最終渲染到三維場景的任意平面中。
[0073]最后應(yīng)說明的是:顯然,上述實(shí)施例僅僅是為清楚地說明本申請所作的舉例,而并非對實(shí)施方式的限定。對于所屬領(lǐng)域的普通技術(shù)人員來說,在上述說明的基礎(chǔ)上還可以做出其它不同形式的變化或變動(dòng)。這里無需也無法對所有的實(shí)施方式予以窮舉。而由此所引申出的顯而易見的變化或變動(dòng)仍處于本申請型的保護(hù)范圍之中。
【權(quán)利要求】
1.一種基于二維和三維一體化矢量渲染引擎的裝置,其特征在于:所述裝置包括二維和三維一體化矢量渲染引擎,提供繪制原語轉(zhuǎn)換功能,即將二維繪制原語轉(zhuǎn)換成三維繪制原語,二維繪制原語是功能的輸入,三維繪制原語是功能的輸出,所述引擎完成二維矢量數(shù)據(jù)和三維矢量數(shù)據(jù)的渲染,三維矢量數(shù)據(jù)直接調(diào)用三維矢量渲染引擎完成渲染,二維矢量數(shù)據(jù)將經(jīng)過一體化渲染引擎分線、面、圖片和文字不同類型處理形成三維繪制原語,然后由三維矢量渲染引擎完成最終渲染。
2.根據(jù)權(quán)利要求1所述的裝置,其特征在于:所述引擎包括線渲染、面填充渲染、位圖渲染和字體渲染,其中,所述線渲染,通過定義顏色、線寬、線型語義來渲染折線、曲線矢量數(shù)據(jù);所述面填充渲染,通過定義填充類型、填充顏色語義來渲染面矢量數(shù)據(jù);所述位圖渲染,將位圖數(shù)據(jù)渲染到特定范圍內(nèi);所述字體渲染,將文字以特定的字體、大小渲染出來。
3.根據(jù)權(quán)利要求2所述的裝置,其特征在于:所述的線渲染為線繪制原語轉(zhuǎn)換根據(jù)顏色、線寬、線型轉(zhuǎn)換為三維繪制原語,一個(gè)帶顏色值的頂點(diǎn)數(shù)組和一個(gè)索引數(shù)組就是線繪制原語到三維繪制原語轉(zhuǎn)換的結(jié)果,線原語轉(zhuǎn)換過程需要根據(jù)線的類型轉(zhuǎn)換線的端頭為平頭或者圓頭,如果是圓頭則需要插入多個(gè)頂點(diǎn)形成三角形扇形模擬端頭的圓弧,相應(yīng)的頂點(diǎn)和索引應(yīng)加入頂點(diǎn)和索引數(shù)組形成更為復(fù)雜的三維渲染原語;對于多段折線也需要在線段間銜接處生成圓弧銜接的扇形,平角銜接類型的線型需要考慮線段夾角為銳角時(shí)會(huì)計(jì)算出的尖頭。
4.根據(jù)權(quán)利要求2所述的裝置,其特征在于:面渲染原語轉(zhuǎn)換主要使用三角剖分算法實(shí)現(xiàn),以面的輪廓線為基礎(chǔ)將面剖分成若干鑲嵌的三角形,所有這些鑲嵌的三角形最終覆蓋面的范圍,面渲染原語轉(zhuǎn)換輸出的結(jié)果和線渲染原語轉(zhuǎn)換的結(jié)果是一個(gè)帶顏色值的頂點(diǎn)數(shù)組和一個(gè)索引數(shù)組;面顏色填充包括是純色填充和漸變色填充,純色填充時(shí)輸出的三維渲染原語中頂點(diǎn)顏色值為相同的顏色值,漸變色填充時(shí),在三角形剖分過程中添加若干以填充中心為圓心圓的輔助線,剖分出更為復(fù)雜的鑲嵌三角形,并根據(jù)三角形頂點(diǎn)距離漸變色填充中心點(diǎn)的距離來計(jì)算剖分出來的三角形頂點(diǎn)的顏色值;基于路徑的漸變色填充采用圓心漸變填充類似的方式,在剖分過程中添加若干的輔助線來加密剖分的三角形,根據(jù)到路徑起點(diǎn)的距離計(jì)算剖分出來的三角形頂點(diǎn)顏色值。
5.根據(jù)權(quán)利要求2所述的裝置,其特征在于:所述位圖渲染原語的轉(zhuǎn)換主要能力是換算出位圖顯示的矩形范圍、以及該范圍對應(yīng)于位圖上的紋理坐標(biāo)。
6.根據(jù)權(quán)利要求2所述的裝置,其特征在于:所述的字體渲染原語轉(zhuǎn)換方法和面渲染原語轉(zhuǎn)換相似,對于字體渲染過程來說,使用者輸入的數(shù)據(jù)不是面范圍,而是字體、顏色、字體大小、文字,排版布局信息,渲染引擎根據(jù)字體和字體大小從字體庫中獲取字體渲染的輪廓,通過面三角剖分算法形成字體渲染的三維渲染原語。
【文檔編號(hào)】G06T11/00GK103606184SQ201310596598
【公開日】2014年2月26日 申請日期:2013年11月21日 優(yōu)先權(quán)日:2013年11月21日
【發(fā)明者】賀楷鍇, 張立, 周耀學(xué), 衛(wèi)東, 程方, 鄧躍進(jìn), 宋愛紅, 范業(yè)穩(wěn), 魏延峰, 朱偉奇, 張龍, 黃俊韜, 陳勝鵬, 許振華, 曹斌, 蘇俊 申請人:武大吉奧信息技術(shù)有限公司