專利名稱:三維場景中實現(xiàn)中文標注的方法及裝置的制作方法
技術領域:
本 發(fā)明涉及3D技木,尤其涉及一種三維場景中實現(xiàn)中文標注的方法以及ー種三維場景中實現(xiàn)中文標注的裝置。
背景技術:
隨著計算機技術的不斷發(fā)展,三維場景應用越來越多的從概念變?yōu)楝F(xiàn)實,如3D游戲、虛擬導航、虛擬仿真系統(tǒng)等等。三維場景一般都是借助于第三方提供的三維設計引擎實現(xiàn)的,在眾多三維圖形引擎中,OGRE (Object-Oriented Graphics Rendering Engine,面向對象圖形渲染引擎)作為開源的三維圖形渲染引擎,充分利用了面向對象技術,使3D軟件的實現(xiàn)更加方便,從而得到了廣泛應用。目前,OGRE已成功的應用于多個三維模擬項目中,包括在線游戲和ー些商業(yè)三維仿真項目,如虛擬數(shù)字城市、立體道路系統(tǒng)等。然而,OGRE三維引擎的開發(fā)商不使用中文作為他們的第一語言,因此OGRE三維引擎并不直接支持中文,只是留出了一定的程序接ロ。在國內,所有基于OGRE所構建的虛擬場景都會遇到如何在3D場景中高效且逼真的實現(xiàn)中文標注的問題,因此,如何在OGRE的3D場景下實現(xiàn)中文標注并且能夠保證運行效率,變得至關重要。傳統(tǒng)的三維場景中實現(xiàn)中文標注的方法主要有如下幾種方案方案一、利用2D的渲染方法,把文字渲染到3D層之上的2D層上,通常利用CE⑶I(Crazy Eddie’s GUI)庫,一種通用的UI (User Interface,用戶界面)庫,與OGRE所提供的2D接ロ層相結合,因此可以在3D場景的層上面再多渲染ー個2D的層以用來顯示文字,這種方案簡單易行,且能方便的利用2D已有技術來處理漢字并顯示,但是這樣會使文字固定在2D層上,不能隨著鏡頭的移動而有遠小近大的變化,因而存在一定的應用局限性;方案ニ、通過貼圖來顯示中文(0GRE本身文字輸出也是用的這種方法),即準備一張很大的圖片,圖片上畫滿漢字,放在資源文件中加載,加載時需要修改Ogre: :Font、Ogre: :FontManager> Ogre: : TextAreaGuiElement三個類,以定位到圖片中的漢字位置,此方法可以解決方案一中的應用局限性,使文字顯示更逼真。然而該方案需要消耗大量顯存,且文字大小相對于位圖大小比例相差太大,導致字形單一,不適合放大縮小,放大縮小時會看到陰影以及馬賽克;方案三、利用TTF (TrueTypeFont)矢量字庫,把所有漢字的Unicode編碼加載到OGRE的配置文件中,由于此方法利用矢量字庫(即用點和線來描述文字),因此在文字尺寸需要放大縮小時,只需要把所有這個文字的點和線放大相應的倍數(shù)即可,不會出現(xiàn)馬賽克等現(xiàn)象,正好解決了方案ニ中的字形缺陷。然而,采用該方案也存在一定缺陷,因為該方案在輸入文字信息之前,需要創(chuàng)建后臺進程進行字體庫的初始化,而常用漢字有兩萬多個,再加上常用中文字體有數(shù)十種,故該方案在啟動時的初始化過程效率十分低下,這顯然不能滿足實際應用
發(fā)明內容
基于此,有必要針對上述方案三中效率低下的問題,提供一種三維場景中實現(xiàn)中文標注的方法及裝置。為實現(xiàn)上述目的,本發(fā)明采用如下的技術方案一種三維場景中即時顯示中文字符的方法,包括以下步驟針對每ー種字體創(chuàng)建相應的字體文件,該字體文件中預先設置有各屬性的參數(shù);根據(jù)用戶選擇的字體格式找到目標字體文件,并對用戶輸入的中文字符進行Unicode碼轉換以得到對應的Unicode碼集合,然后根據(jù)所述Unicode碼集合修改所述目標字體文件中對應屬性的參數(shù);對修改參數(shù)后的目標字體文件進行加載,并生成相應的字體紋理;獲取所述字體紋理的UV坐標;根據(jù)所述字體紋理的UV坐標進行矩形創(chuàng)建和紋理映射;對紋理映射后的字體紋理進行顔色和大小設置,然后進行3d渲染。
一種三維場景中實現(xiàn)中文標注的裝置,包括初始化模塊,用于針對每ー種字體創(chuàng)建相應的字體文件,該字體文件中預先設置有各屬性的參數(shù);處理模塊,用于根據(jù)用戶選擇的字體格式找到對應的目標字體文件,并對用戶輸入的中文字符進行Unicode碼轉換以得到對應的Unicode碼集合,然后根據(jù)所述Unicode碼集合修改所述目標字體文件中對應屬性的參數(shù);字體紋理生成模塊,用于加載修改參數(shù)后的目標字體文件,并據(jù)此生成相應的字體紋理;坐標獲取模塊,用于獲取所述字體紋理的UV坐標;渲染模塊,用于根據(jù)所述字體紋理的UV坐標進行矩形創(chuàng)建和紋理映射,然后進行3d渲染。與傳統(tǒng)的三維場景中實現(xiàn)中文標注的方法相比,本發(fā)明的三維場景中實現(xiàn)中文標注的方法及裝置具有如下優(yōu)點一、效率高在輸入文字信息之前,無須創(chuàng)建后臺進程進行字體庫的初始化,只需要創(chuàng)建所需字體的字體文件即可。這在所需要支持的字體很多的情況下將極大的減少初始化過程的工作量,從而提高了三維場景中實現(xiàn)中文標注的效率。ニ、可實時標注本發(fā)明可根據(jù)用戶選擇的字體格式找到對應的目標字體文件以及根據(jù)用戶輸入的文字內容得到對應的Unicode碼集合,進而實時生成對應的字體紋理,該過程為毫秒級。三、支持多字體每ー種字體對應ー個字體文件,可以直接定位,無須搜索。
圖I為本發(fā)明一種三維場景中實現(xiàn)中文標注的方法流程示意圖;圖2為本發(fā)明一種三維場景中實現(xiàn)中文標注的裝置結構示意圖。
具體實施例方式在OGRE三維引擎中,字體格式以材質對象存在,集合了字符紋理及其坐標信息。這些字體信息保存在.fontdef格式的文件中,該文件在系統(tǒng)啟動時即被解析,其基本格式如下
<font name>
{
Typetmetvpe
Sourcesimkai Uf Size16 Resolution %
Code_points ..
}其中,type屬性TrueType字體,告訴OGRE生成紋理字體;source屬性代表中文字體的ttf文件載入,如simkai. ttf文件載入;size屬性字體點的大小,這里的點是傳統(tǒng)計量字大小的單位,Ipた0. 35mm ;resolution屬性顯示器分辨率/姆英寸點數(shù),這是用來結合點的大小,以確定該字體在目標顯不器上對應的最終大??;code points屬性該屬性允許用戶指定哪些Unicode代碼點需要獲取字形紋理,即文字標注中的字符集合。本發(fā)明在對OGRE三維引擎中字體顯示模塊研究的基礎上,通過分析OGRE的文字使用原理,提出如下的三維場景中實現(xiàn)中文標注的方法,參見圖I所示,該方法包括以下步驟步驟S101,針對每ー種字體創(chuàng)建相應的字體文件以供ORGE加載,然后進入步驟S102。需要說明的是所述創(chuàng)建的字體文件中預先設置有各屬性的參數(shù)。作為ー個較好的實施例,所述字體文件中各屬性的參數(shù)可以設置為如下=Type屬性設置為TrueType字體;source屬性設置為代表中文字體的ttf文件,,如simkai. ttf偕體,simsun. ttf宋體,simhei. ttf黑體等;size屬性和resolution屬性設置為默認情況下,即分別設置為16、96 ;另外code_points屬性設置為33-166,即對應全部拉丁字符。另外,作為ー個較好的實施例,上述創(chuàng)建的字體文件可以為fontdef格式的文件。步驟S102,對要標注的中文字符進行處理。具體過程包括首先根據(jù)用戶選擇的字體格式找到對應的目標字體文件,并對用戶輸入的中文字符進行Unicode碼轉換以得到對應的Unicode碼集合,然后根據(jù)所述Unicode碼集合修改所述目標字體文件中對應屬性(即code_points屬性)的參數(shù),修改完之后進入步驟S103。事實上在步驟S102之前還可以包括如下步驟3D軟件在啟動時加載步驟SlOl中創(chuàng)建的字體文件,并生成相應的字體名稱與字體文件的表格。步驟S103,加載修改參數(shù)后的目標字體文件,并據(jù)此生成相應的字體紋理,然后進入步驟S104。3D軟件調用ORGE引擎提供的相關接ロ函數(shù)即可實現(xiàn)對步驟S102中修改了code_points參數(shù)的字體文件進行加載,并生成相應的字體紋理。步驟S104,獲取所述字體紋理的UV坐標,然后進入步驟S105。作為一個較好的實施例,上述獲取UV坐標的過程具體可以包括如下步驟3D軟件調用OGRE引擎提供的相關接口對目標字體文件中的code_points 屬性對應的字符串進行遍歷,對每一個字符生成其相應的UV坐標,然后計算出整個字符串對應的UV坐標。步驟S105,根據(jù)所述字體紋理的UV坐標進行矩形創(chuàng)建和紋理映射,然后進行3d渲染。3D軟件可根據(jù)步驟S104中生成的字符串對應的UV坐標來創(chuàng)建矩形,然后將步驟S103中生成的紋理填入該矩形即可實現(xiàn)紋理映射。另外進行3d渲染的過程屬于公知技術,本發(fā)明不予贅述。作為一個較好的實施例,所述步驟S105中在進行紋理映射之后、進行3d渲染之前,還可以包括步驟根據(jù)用戶的需求,對紋理映射后的字體紋理進行顏色和大小設置。如可調用OGRE引擎提供的相關接口將字體顏色設置成用戶所選擇的字體顏色。另外,與上述一種三維場景中實現(xiàn)中文標注的方法相對應的,本發(fā)明還一種三維場景中實現(xiàn)中文標注的裝置,如圖2所示,包括初始化模塊101,用于針對每一種字體創(chuàng)建相應的字體文件,該字體文件中預先設置有各屬性的參數(shù)。所述字體文件中各屬性的參數(shù)可以設置為如下Type屬性設置為TrueType字體;source屬性設置為代表中文字體的ttf文件,,如simkai. ttf偕體,simsun. ttf宋體,simhei. ttf黑體等;size屬性和resolution屬性設置為默認情況下,即分別設置為16、96 ;另外code_points屬性設置為33-166,即對應全部拉丁字符;處理模塊102,用于根據(jù)用戶選擇的字體格式找到對應的目標字體文件,并對用戶輸入的中文字符進行Unicode碼轉換以得到對應的Unicode碼集合,然后根據(jù)所述Unicode碼集合修改所述目標字體文件中對應屬性;字體紋理生成模塊103,用于加載修改參數(shù)后的目標字體文件,并據(jù)此生成相應的字體紋理;坐標獲取模塊104,用于獲取所述字體紋理的UV坐標;渲染模塊105,用于根據(jù)所述字體紋理的UV坐標進行矩形創(chuàng)建和紋理映射,然后進行3d渲染。作這一個較好的實施例,所述初始化模塊101中創(chuàng)建的字體文件可以為fontdef格式的文件。作這一個較好的實施例,所述渲染模塊105可以包括設置模塊,用于在進行紋理映射之后、進行3d渲染之前,對紋理映射后的字體紋理進行顏色和大小設置。本發(fā)明的三維場景中實現(xiàn)中文標注的裝置的其它技術特征與上述一種三維場景中實現(xiàn)中文標注的方法相同,此處不予贅述。與傳統(tǒng)的三維場景中實現(xiàn)中文標注的方法相比,本發(fā)明的三維場景中實現(xiàn)中文標注的方法及裝置具有如下優(yōu)點一、效率高在輸入文字信息之前,無須創(chuàng)建后臺進程進行字體庫的初始化,只需要創(chuàng)建所需字體的字體文件即可。這在所需要支持的字體很多的情況下將極大的減少初始化過程的工作量,從而提高三維場景中實現(xiàn)中文標注的效率。二、可實時標注本發(fā)明可根據(jù)用戶選擇的字體格式找到對應的目標字體文件以及根據(jù)用戶輸入的文字內容得到對應的Unicode碼集合,進而實時生成對應的字體紋理,該過程為毫秒級。三、支持多字體每一種字體對應一個字體文件,可以直接定位,無須搜索。
以上所述實施例僅表達了本發(fā)明的幾種實施方式,其描述較為具體和詳細,但并不能因此而理解為對本發(fā)明專利范圍的限制。應當指出的是,對于本領域的普通技術人員來說,在不脫離本發(fā)明構思的前提下,還可以做出若干變形和改進,這些都屬于本發(fā)明的保護范圍。因此,本發(fā)明專利的保護范圍應以所附權利要求為準。
權利要求
1.一種三維場景中實現(xiàn)中文標注的方法,其特征在于,包括以下步驟 針對每ー種字體創(chuàng)建相應的字體文件,該字體文件中預先設置有各屬性的參數(shù); 根據(jù)用戶選擇的字體格式找到對應的目標字體文件,并對用戶輸入的中文字符進行Unicode碼轉換以得到對應的Unicode碼集合,然后根據(jù)所述Unicode碼集合修改所述目標字體文件中對應屬性的參數(shù); 加載修改參數(shù)后的目標字體文件,并據(jù)此生成相應的字體紋理; 獲取所述字體紋理的UV坐標; 根據(jù)所述字體紋理的UV坐標進行矩形創(chuàng)建和紋理映射,然后進行3d渲染。
2.根據(jù)權利要求I所述的三維場景中實現(xiàn)中文標注的方法,其特征在于,在所述進行紋理映射之后、進行3d渲染之前,還包括步驟對紋理映射后的字體紋理進行顔色和大小設置。
3.根據(jù)權利要求I所述的三維場景中實現(xiàn)中文標注的方法,其特征在于,所述創(chuàng)建的字體文件為fontdef格式的文件。
4.根據(jù)權利要求I或2或3所述的三維場景中實現(xiàn)中文標注的方法,其特征在于,所述字體文件中各屬性的參數(shù)設置為如下Type屬性設置為TrueType字體;source屬性設置為代表中文字體的ttf文件;size屬性設置為16 !resolution屬性設置為96 ;以及code_points屬性設置為33-166。
5.一種三維場景中實現(xiàn)中文標注的裝置,其特征在于,包括 初始化模塊,用于針對每ー種字體創(chuàng)建相應的字體文件,該字體文件中預先設置有各屬性的參數(shù); 處理模塊,用于根據(jù)用戶選擇的字體格式找到對應的目標字體文件,并對用戶輸入的中文字符進行Unicode碼轉換以得到對應的Unicode碼集合,然后根據(jù)所述Unicode碼集合修改所述目標字體文件中對應屬性的參數(shù); 字體紋理生成模塊,用于加載修改參數(shù)后的目標字體文件,并據(jù)此生成相應的字體紋理; 坐標獲取模塊,用于獲取所述字體紋理的UV坐標; 渲染模塊,用于根據(jù)所述字體紋理的UV坐標進行矩形創(chuàng)建和紋理映射,然后進行3d渲染。
6.根據(jù)權利要求5所述的三維場景中實現(xiàn)中文標注的裝置,其特征在于,所述初始化模塊中創(chuàng)建的字體文件為fontdef格式的文件。
7.根據(jù)權利要求5所述的三維場景中實現(xiàn)中文標注的裝置,其特征在于,所述渲染模塊包括設置模塊,用于在進行紋理映射之后、進行3d渲染之前,對紋理映射后的字體紋理進行顏色和大小設置。
全文摘要
本發(fā)明提供一種三維場景中實現(xiàn)中文標注的方法及裝置,該方法包括以下步驟針對每一種字體創(chuàng)建相應的字體文件,該字體文件中預先設置有各屬性的參數(shù);根據(jù)用戶選擇的字體格式找到目標字體文件,并對用戶輸入的中文字符進行Unicode碼轉換以得到對應的Unicode碼集合,然后根據(jù)所述Unicode碼集合修改所述目標字體文件中的參數(shù);對修改參數(shù)后的目標字體文件進行加載,并生成相應的字體紋理;獲取所述字體紋理的UV坐標;根據(jù)所述字體紋理的UV坐標進行矩形創(chuàng)建和紋理映射;對紋理映射后的字體紋理進行顏色和大小設置,然后進行3d渲染。本發(fā)明的方法及裝置具有效率高、可實時標注以及支持多字體的優(yōu)點。
文檔編號G06T11/60GK102867322SQ201210308949
公開日2013年1月9日 申請日期2012年8月27日 優(yōu)先權日2012年8月27日
發(fā)明者李金鳳, 康曉林 申請人:廣東威創(chuàng)視訊科技股份有限公司