OSG中LabelControl中文顯示

2021-07-25 11:56:13 字數 2307 閱讀 3602

osg預設是不支援中文顯示的,然而在有些時候還是需要中文顯示的,對於osg的中文顯示,網上有很多的解決方案,但是我沒有找到關於labelcontrol的顯示,這裡我把關於labelcontrol的中文顯示分享一下。

osg的中文顯示大致來說可以分為3步,我這裡的前2步就是參考網上的解決方案,沒有什麼特別的。

1.定義轉換函式。

void unicodetoutf8(const std::wstring &src, std::string& result) 

void gb2312tounicode(const std::string& src, std::wstring& result)

void gb2312toutf8(const std::string& src, std::string& result)

2.轉換需要轉換的字元。

std::string _strlon;

_strlon = "經度:";

std::string _strwidelon;

gb2312toutf8(_strlon,_strwidelon);

std::string _strlat;

_strlat = "緯度:";

std::string _strwidelat;

gb2312toutf8(_strlat,_strwidelat);

std::string _strele;

_strele = "高程:";

std::string _strwideele;

gb2312toutf8(_strele,_strwideele);

std::string _strscale;

_strscale = "比例尺:";

std::string _strwidescale;

gb2312toutf8(_strscale,_strwidescale);

上述2步與網上的是一樣的,其實大家只需要定製自己的第3步就行,網上定製我都看了一下,大部分都一樣,都是再osgearth的那個球上列印的北京或者中國之類的,這裡我不是在球上列印,而是單獨在旁邊定義乙個labelcontrol,把中文列印在labelcontrol上面。

3.最重要的是第3步,這裡有2點。(1)找到中文顯示的檔案,大家可以在自己的計算機上找到乙個名為simsum.ttc的檔案,應該是在系統的字型資料夾下面,可以通過計算機搜尋出來,然後通過readfontfile讀取這個檔案的路徑,注意區分單斜槓與雙斜槓,或者把這個檔案複製到自己的工程下面。(2)指定字型為utf8即可。**如下:

labelcontrol* label1 = new labelcontrol(_strwidelon);

label1->setfont( osgtext::readfontfile( "simsun.ttc" ) );

// label1->setfontsize( 24.0f );

label1->setencoding(osgtext::string::encoding_utf8);

labelcontrol* label2 = new labelcontrol(_strwidelat);

label2->setfont( osgtext::readfontfile( "simsun.ttc" ) );

// label2->setfontsize( 24.0f );

label2->setencoding(osgtext::string::encoding_utf8);

labelcontrol* label3 = new labelcontrol(_strwideele);

label3->setfont( osgtext::readfontfile( "simsun.ttc" ) );

// label3->setfontsize( 24.0f );

label3->setencoding(osgtext::string::encoding_utf8);

labelcontrol* label4 = new labelcontrol(_strwidescale);

label4->setfont( osgtext::readfontfile( "simsun.ttc" ) );

// label4->setfontsize( 24.0f );

label4->setencoding(osgtext::string::encoding_utf8);

總結起來:3步走,前面2步是通用的,主要步驟是根據自己的需求定製第3步即可,定製就需要解決2個問題,(1)指定中文檔案路徑。(2)指定字型格式為utf8。

《OSG3 4 0》Part2 OSG中的多執行緒

osg中的多執行緒 osg中的多執行緒是通過openthreads實現的。主要有七大類 thread 預設建構函式 static int yieldcurrentthread 要求當前執行緒出讓cpu控制權,交給其他正在等待的執行緒 int start 啟動執行緒。此時將自動開始執行執行緒的run ...

OSG中圓錐的使用

以前寫的一些測試程式,整理一下,看什麼時候需要用的時候能把功能盡快新增到工程中。圓錐的使用,包括圓錐大小的定義,圓錐的顏色修改,圓錐的透明效果,圓錐的線框模型,圓錐的旋轉,圓錐的中心點。如下 pragma comment lib,osg.lib pragma comment lib,osgdb.li...

OSG中LOD的使用

lod是level of detail 的縮寫,lod允許程式根據攝像機與物體的距離,來決定使用哪個模型。使用lod是為了兼顧程式的執行效率與物體顯示的精細程度。當物體離攝像機很遠的時候,物體看起來就是乙個點,這時候你使用再精細的模型,最終螢幕上成像也是乙個點。而你用的模型越精細,計算機內部需要的計...