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是為了兼顧程式的執行效率與物體顯示的精細程度。當物體離攝像機很遠的時候,物體看起來就是乙個點,這時候你使用再精細的模型,最終螢幕上成像也是乙個點。而你用的模型越精細,計算機內部需要的計...