在osg中顯示文字的時候,遇到了兩個問題:
1、編譯好的osg居然缺少外掛程式,一看果然少了osgdb_freetype外掛程式;
2、中午字型無法顯示,最後查到是需要轉成寬位元組。
以下是text文字節點的相關屬性和設定,字型設定那裡,有些字型不能顯示中文是正常的,建議使用「simhei.ttf」
osg::ref_ptrfont = osgtext::readfontfile("fonts/simhei.ttf"); //文字使用字型
//test文字節點
osg::ref_ptrtext = new osgtext::text;
text->setfont(font);//設定字型樣式
text->setcharactersize(size);//字型大小
text->setposition(pos); //設定字型放置位置
text->setcolor(osg::vec4(1.0,1.0,1.0,1.0)); //設定字型顏色
text->setalignment(osgtext::text::center_bottom);//文字顯示方向
//text->setaxisalignment(osgtext::text::screen);//獲取文字對稱成方式正對螢幕方向
//text->setcharactersizemode(osgtext::text::screen_coords);//跟隨視角不斷變化,離物體越遠,文字越大
text->setautorotatetoscreen(true);//跟隨視角不斷變化,但離物體越遠,文字越小,和現實當中像類似
text->setbackdroptype(osgtext::text::outline);//對文字進行描邊
text->setbackdropcolor(osg::vec4(1.0,0.0,0.0,1.0));//描邊顏色
text->setdrawmode(osgtext::text::text | osgtext::text::boundingbox);//新增文字邊框
text->setaxisalignment(osgtext::text::xz_plane);//獲取文字對稱成方式
將char轉換成wchar即轉換成寬位元組,需要注意的是要引入標頭檔案#include
//第一種轉換成寬位元組
int requiredsize=mbstowcs(null,string,0);//如果mbstowcs第一引數為null那麼返回字串的數目
wchar_t* wtext=new wchar_t[requiredsize+1];
mbstowcs(wtext,string,requiredsize+1);//由char轉換成wchar型別
text.settext(wtext);
delete wtext;
//第二種轉換成寬位元組
char *data1 = "滑坡體長約300公尺";
dword len1 = multibytetowidechar(cp_acp, 0, data1, -1, null, 0);//得到data的位元組數
tchar *des1 = new tchar[len1];
multibytetowidechar(cp_acp, 0, data1, -1, des1, len1);
text1->settext(des1);//設定顯示的文字
osg漢字顯示
osg中顯示漢字應該不是什麼很難的事情 text settext l 我愛中國 一般是在漢字前加上乙個大寫的l,這樣就把漢字字元變成寬字元,就可以顯示了,寬字元就是乙個字是多個字元構成的 但是在漢字需要動態顯示的時候,這種加l的方法就懵逼了 網上有個帖子給出的 但本人親試發現不行,後來改了一下 vo...
osg 中顯示中文字元出現亂碼問題
osg中建立字型函式 osg node createtext wchar t str,double pos 3 double rgba 4 int textsize char textname 呼叫建立字型函式 void osgcreatetext char str,double pos 3 dou...
OSG和osgearth顯示中文
做osg相關的專案有一段時間了,一直想寫幾篇這方面的博文,今天終於開始了。今天主要介紹一下怎麼解決osg 和osgearth中顯示中文的的問題,這個問題我反覆遇到讓我很是糾結啊。一 知識儲備 要想很好的理解和解決這個問題,首先要了解什麼是多位元組和寬位元組。說實話我之前也知道這兩個位元組到底有什麼區...