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 _chineseexample;
_chineseexample = "中文示例";
std::string _writechineseexample;
gb2312toutf8(_chineseexample,_writechineseexample);
3.寫入想要顯示的地方,我這邊是labelcontrol
經過測試發現問題,需要設定編碼和文字格式
std::string _chineseexample;
_chineseexample = "中文示例";
std::string _writechineseexample;
gb2312toutf8(_chineseexample,_writechineseexample);
labelcontrol* label = new labelcontrol(_writechineseexample + "osgearth controls toolkit");
label->setfontsize(24.0f);
label->sethorizalign(control::align_center);
label->setmargin(5);
label->setfont(osgtext::readfontfile("data"));
label->setencoding(osgtext::string::encoding_utf8);
center->addcontrol(label);
《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是為了兼顧程式的執行效率與物體顯示的精細程度。當物體離攝像機很遠的時候,物體看起來就是乙個點,這時候你使用再精細的模型,最終螢幕上成像也是乙個點。而你用的模型越精細,計算機內部需要的計...